<head>

	
	<link rel="preconnect" href="https://apps.developermedia.com">
	<link rel="preconnect" href="https://cdn1.developermedia.com">
	<link rel="preconnect" href="https://cdn.ampproject.org">
	<link rel="preconnect" href="https://fonts.googleapis.com">
	<link rel="preconnect" href="https://ajax.googleapis.com">
	<link rel="preconnect" href="https://adservice.google.com">
	<link rel="preconnect" href="https://www.googletagservices.com">
	<link rel="preconnect" href="https://www.googletagmanager.com">
	<link rel="preconnect" href="https://www.google.com">
	<link rel="preconnect" href="https://www.google-analytics.com">
	<link rel="preconnect" href="https://pagead2.googlesyndication.com">

	<link rel="preconnect" href="https://codeproject.freetls.fastly.net">


	<link rel="preload" href="https://codeproject.freetls.fastly.net/App_Themes/CodeProject/Img/logo250x135.gif" as="image">


	<link rel="preload" href="/App_Themes/CodeProject/Img/logo135-bg.gif" as="image">
	<link rel="preload" href="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js" as="script" type="text/javascript">

<title>How do I detect spots on tablets - CodeProject</title><!-- inlined file /App_Themes/CodeProject/Css/Question.Critical.min.css. -->
<style type="text/css">
.theme1-background {
  background-color: #ff9900;
}
.contrast1-color {
  color: #666666;
}
html,
div,
span,
applet,
object,
iframe,
a,
abbr,
acronym,
big,
cite,
code,
del,
dfn,
em,
font,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
fieldset,
form,
label,
table,
tbody,
tfoot,
thead,
tr,
th,
td,
li,
ol,
ul {
  margin: 0;
  padding: 0;
  border: 0;
}
html {
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
  font-smooth: always;
}
body,
p,
h1,
h2,
h3,
h4,
h5,
h6,
li,
tr,
td,
th,
dd,
dt {
  font-family: "Segoe UI", Arial, Sans-Serif;
  font-size: 16px;
  line-height: 1.4;
  color: #111111;
}
body {
  margin: 0;
}
h1,
h3,
h4,
h5,
th {
  font-weight: bold;
}
h1 {
  color: #333333;
  padding: 0px;
  margin: 0 0 7px;
  text-align: left;
}
h2 {
  margin: 20px 0 11px;
  padding: 0;
  padding-bottom: 10px;
  color: #333333;
}
h3 {
  color: #ff9900;
}
h1 {
  font-size: 38px;
  font-weight: 400;
}
h2 {
  font-size: 29px;
  font-weight: 400;
}
h3 {
  font-size: 19px;
  font-weight: normal;
}
pre {
  color: black;
  background-color: #FBEDBB;
  padding: 6px;
  font: 14px Consolas, monospace, mono;
  white-space: pre;
  overflow: auto;
  border: solid 1px #FBEDBB;
  -moz-tab-size: 4;
  -o-tab-size: 4;
  -webkit-tab-size: 4;
  tab-size: 4;
}
code {
  color: #990000;
  font: 15px Consolas, monospace, mono;
}
table {
  background-color: Transparent;
}
img {
  -ms-interpolation-mode: bicubic;
}
a {
  text-decoration: none;
  color: #005782;
}
a:visited {
  color: #800080;
}
a:hover {
  text-decoration: underline;
}
a:not([href]) {
  color: inherit;
  text-decoration: none;
}
input[type="text"],
input[type="url"],
input[type="search"],
input[type="email"],
input[type="number"],
input[type="password"],
select,
textarea {
  border: 1px solid #D7D7D7;
  font-size: 16px;
  padding: 5px;
}
textarea {
  font-family: Consolas, monospace;
  -moz-tab-size: 4;
  -o-tab-size: 4;
  -webkit-tab-size: 4;
  tab-size: 4;
}
a.button,
a.button-large,
.button,
.button-large {
  color: white;
  background-color: #E08900;
  border: 1px solid #cccccc;
  text-decoration: none;
  white-space: nowrap;
  font-size: 100%;
  padding: 4px;
  cursor: pointer;
  border-radius: 3px;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
}
.button-large {
  font-size: 17px;
  padding: 4px 9px;
}
a.button.safe,
a.button.unsafe {
  color: white;
}
.button.compose {
  color: white;
  background-color: #D14836;
  border-color: #D14836;
}
.button.unsafe {
  border-color: red;
}
.button.safe {
  border-color: #76AB40;
}
.tiny-text {
  font-size: 13px;
}
table.small-text td,
ul.small-text li,
ol.small-text li,
.small-text {
  font-size: 14px;
}
.medium-text {
  font-size: 17px;
}
.invisible {
  display: none;
}
.subdue,
.subdue li,
tr.subdue td {
  color: #808080;
}
.bold {
  font-weight: bold;
}
.align-left {
  text-align: left;
}
.align-right {
  text-align: right;
}
.align-center {
  text-align: center;
}
.align-middle {
  vertical-align: middle;
}
.float-right {
  float: right;
}
.float-left {
  float: left;
}
.sticky {
  position: sticky;
  top: 0;
}
.extended {
  width: 100%;
  box-sizing: border-box;
}
.tight,
.m-0 {
  margin: 0;
}
.spaced,
.m-2 {
  margin: 0.5rem;
}
.tight,
.p-0 {
  padding: 0;
}
.padded-top,
.pt-4,
.py-4 {
  padding-top: 1.5rem;
}
.padded-bottom,
.pb-4,
.py-4 {
  padding-bottom: 1.5rem;
}
.nowrap {
  white-space: nowrap;
}
.clipped {
  overflow: hidden;
}
.inline {
  display: inline-block;
}
ol,
ul {
  padding-left: 40px;
  margin: 10px 0;
}
ol.spaced,
ul.spaced {
  margin: 3px;
}
ol.spaced li,
ul.spaced li {
  margin: 10px 0 10px 0;
  *margin: 10px 0 10px 25px;
}
.callout {
  margin: 20px 0;
  background-color: #FFFFe1;
  color: #333333;
  border: 1px solid #cccccc;
  padding: 15px;
  border-radius: 3px;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
}
.trace {
  padding: 20px;
  background-color: #eeeeee;
  color: #333333;
  border: 1px solid red;
  font-size: 13px;
}
textarea,
input[type="text"],
input[type="button"],
input[type="submit"] {
  -webkit-appearance: none;
  border-radius: 0;
}
.ui-tabs-nav {
  list-style: none;
  margin: 0px;
  padding: 0px 0px 0px 3px;
  background-color: white;
  border: none;
}
.ui-tabs-nav:after {
  display: block;
  clear: both;
  content: " ";
}
.ui-tabs-nav li {
  display: inline;
  margin: 0px 0px 0px 2px;
  font-weight: bold;
  border: none;
}
.ui-tabs-nav a,
.ui-tabs-nav a span {
  float: left;
  font-weight: bold;
}
.ui-tabs-nav a {
  padding-left: 0px;
  text-decoration: none;
  white-space: nowrap;
  outline: none;
}
.ui-tabs-nav a span {
  margin-bottom: 0px;
  font-weight: normal;
  padding: 5px 7px;
  color: #808080;
  background-color: #FFF8DF;
}
.ui-tabs-nav a:link,
.ui-tabs-nav a:visited {
  color: #333333;
}
.ui-tabs-nav .ui-tabs-selected a {
  color: #333333;
}
.ui-tabs-nav .ui-tabs-active a span,
.ui-tabs-nav .ui-tabs-selected a span,
.ui-tabs-nav a:hover span {
  background-color: #ff9900;
  color: white;
  text-decoration: none;
}
.ui-tabs-panel {
  display: block;
  clear: both;
  border: 1px solid #f2f2f2;
  padding: 10px;
  background: #fff;
}
.container-content {
  background-color: white;
  position: relative;
  zoom: 1;
  padding: 0 9px;
  cursor: default;
}
.container-content-wrap {
  margin: auto;
  max-width: 1270px;
}
.container-main {
  zoom: 1;
  padding: 0 0px;
}
.container-main .text-sidebar {
  margin-left: 20px;
}
.container-content pre,
.container-code pre,
.answer pre {
  white-space: pre-wrap;
  /* css-3 */
  white-space: -moz-pre-wrap;
  /* Mozilla, since 1999 */
  white-space: -pre-wrap;
  /* Opera 4-6 */
  white-space: -o-pre-wrap;
  /* Opera 7 */
  word-wrap: break-word;
  /* Internet Explorer 5.5+ */
  _white-space: pre;
  /* IE only hack to re-specify in addition to word-wrap  */
  word-break: break-word;
  -ms-word-break: break-word;
}
.row {
  display: flex;
  flex-wrap: wrap;
}

.justify-content-start		{ justify-content: start; }
.justify-content-end		{ justify-content: end; }
.justify-content-center		{ justify-content: center; }
.justify-content-between	{ justify-content: space-between; }
.justify-content-around     { justify-content: space-around}
.flex-wrap          { flex-wrap: wrap; }
.flex-nowrap		{ flex-wrap: nowrap; }
.row > * {
  flex-shrink: 0;
  max-width: 100%;
}
.col {
  flex: 1 0 0%;
}
.col-2 {
  flex: 0 0 auto;
  width: 16.66666667%;
}
.col-10 {
  flex: 0 0 auto;
  width: 83.33333333%;
}
.flex-container {
  display: -webkit-box;
  /* OLD - iOS 6-, Safari 3.1-6 */
  display: -moz-box;
  /* OLD - Firefox 19- (buggy but mostly works) */
  display: -ms-flexbox;
  /* TWEENER - IE 10 */
  display: -webkit-flex;
  /* NEW - Chrome */
  display: flex;
  /* NEW, Spec - Opera 12.1, Firefox 20+ */
}
.flex-extend {
  justify-content: space-between;
}
.flex-wrap {
  flex-wrap: wrap;
}
.flex-item {
  -webkit-box-flex: 1;
  /* OLD - iOS 6-, Safari 3.1-6 */
  -moz-box-flex: 1;
  /* OLD - Firefox 19- */
  -webkit-flex: 1;
  /* Chrome */
  -ms-flex: 1;
  /* IE 10 */
  flex: 1;
}
.flex-item-tight {
  flex: 0 1 auto;
}
.hover-container {
  display: block;
  position: relative;
}
.clearfix:after,
.container:after {
  display: block;
  content: '.';
  visibility: hidden;
  height: 0px;
  clear: both;
}
.clearfix,
.container {
  display: block;
  /* Mac IE5 doesn't see this, but everyone else does */
}
.access-link,
.access-link img {
  position: absolute;
  top: 0px;
  left: 0px;
  width: 1px;
  height: 1px;
  z-index: 101;
  border-style: none;
  margin-top: -1px;
  overflow: hidden;
}
.site-top-menu {
  white-space: nowrap;
  position: absolute;
  z-index: 101;
  width: 100%;
}
.site-top-menu .main-content {
  width: 100%;
}
.site-top-menu .main-content .memberbar {
  margin-left: 90px;
  margin-right: 10px;
}
.site-top-menu.fixed .main-content {
  margin: auto;
  max-width: 1270px;
}
.site-header {
  background-image: url('/App_Themes/CodeProject/Img/logo135-bg.gif');
  white-space: nowrap;
  overflow: hidden;
}
.site-header .main-content {
  position: relative;
  overflow: hidden;
  white-space: nowrap;
}
.site-header .logo {
  display: inline-block;
}
.site-header .promo {
  display: inline-block;
  position: absolute;
  top: 33px;
  right: 0;
}
.site-header.fixed .main-content {
  margin: auto;
  max-width: 1270px;
}
.sub-headerbar {
  padding-right: 9px;
  position: relative;
  margin: auto;
  max-width: 1270px;
}
.sub-headerbar-divider {
  margin-left: 10px;
  height: 1px;
  border-bottom: 1px solid #cccccc;
  position: absolute;
  bottom: 2px;
  left: 0px;
  right: 9px;
}
.memberbar {
    height: 25px;
    padding-top: 5px;
    color: #666;
    font-size: 14px;
    font-weight: 500;
}
.memberbar a {
  color: #808080;
  font-size: 14px;
}
div.navbar {
  white-space: nowrap;
}
.navmenu {
  background: white;
  color: #4d4d4d;
  padding: 0px;
  margin: 0px;
  list-style: none;
  height: 25px;
}
.navmenu ul,
.navmenu li {
  margin: 0;
  padding: 0;
}
.navmenu .has-submenu {
  position: absolute;
  right: 5px;
  padding-left: 10px;
}
.navmenu ul,
.navmenu > li.open:hover > a,
.navmenu > li.open > a:active {
  border: 1px solid #cccccc;
  border-bottom-color: white;
}
.navmenu > li {
  margin: 0 11px 2px 2px;
}
.navmenu > li > a {
  padding: 2px 7px 6px 7px;
  border: 1px solid transparent;
  font-weight: bold;
}
.navmenu a {
  display: block;
  float: left;
  color: #666666;
  background: white;
  font-size: 17px;
  padding: 0px 9px;
  text-decoration: none;
  white-space: nowrap;
}
.navmenu a.fly {
  white-space: nowrap;
}
.navmenu ul {
  background: white;
  position: absolute;
  left: -9999px;
  top: -9999px;
  list-style: none;
}
.navmenu li {
  float: left;
  color: #4d4d4d;
}
.navmenu li.last {
  height: 9px;
}
.navmenu li > a:active,
.navmenu li:hover,
.navmenu li:hover > a,
.navmenu li:hover.heading,
.navmenu li a.selected {
  position: relative;
  color: white;
  background-color: #ff9900;
}
.navmenu li ul {
  border-bottom: 5px solid #ff9900;
}
.navmenu li li {
  float: none;
}
.navmenu li li a {
  float: none;
  font-size: 16px;
  font-weight: normal;
}
.navmenu li li a.fly {
  color: #4d4d4d;
  background-color: white;
  padding: 2px 20px;
}
.navmenu li li a.break {
  margin-bottom: 15px;
}
.navmenu li li a.highlight1,
.navmenu li li a.highlight1:active,
.navmenu li li a.highlight1:hover {
  background-color: #009900;
}
.navmenu li li a.highlight2,
.navmenu li li a.highlight2:active,
.navmenu li li a.highlight2:hover {
  background-color: #ff9900;
}
.navmenu li li a.highlight3,
.navmenu li li a.highlight3:active,
.navmenu li li a.highlight3:hover {
  background-color: #000000;
}
.navmenu li li a.highlight1,
.navmenu li li a.highlight2,
.navmenu li li a.highlight3 {
  color: white;
  font-size: 16px;
  margin: 5px 0;
  padding: 9px 20px;
}
.site-footer {
  display: -webkit-box;
  /* OLD - iOS 6-, Safari 3.1-6 */
  display: -moz-box;
  /* OLD - Firefox 19- (buggy but mostly works) */
  display: -ms-flexbox;
  /* TWEENER - IE 10 */
  display: -webkit-flex;
  /* NEW - Chrome */
  display: flex;
  /* NEW, Spec - Opera 12.1, Firefox 20+ */
  border-top: 3px solid #ff9900;
  padding: 10px 10px 0 10px;
  margin-top: 10px;
  width: calc(100% - 20px);
  font-size: 13px;
  color: #999999;
}
.site-footer .align-left,
.site-footer .align-center,
.site-footer .align-right {
  -webkit-box-flex: 1;
  /* OLD - iOS 6-, Safari 3.1-6 */
  -moz-box-flex: 1;
  /* OLD - Firefox 19- */
  -webkit-flex: 1;
  /* Chrome */
  -ms-flex: 1;
  /* IE 10 */
  flex: 1;
}
.site-footer .align-left {
  flex: 1 0 100px;
}
.site-footer .align-center {
  flex: 0 1 0%;
  white-space: nowrap;
}
.site-footer .align-right {
  flex: 1 0 100px;
}
.site-footer .page-width .active {
  border-bottom: 2px solid #ff9900;
}
.searchbar {
  padding: 0;
}
.searchbar .search {
  margin-bottom: 4px;
  padding: 2px 5px 0px;
  border: 1px solid #cccccc;
}
.searchbar .search.subdue {
  color: #cccccc;
}
.searchbar input.search {
  width: 190px;
  border: none;
  font-size: 13px;
  padding: 4px 2px;
}
.searchbar .search-advanced {
  padding: 8px;
  width: 203px;
  z-index: 1000;
  background-color: white;
  border: solid 1px #cccccc;
  position: absolute;
  top: -4px;
  right: 0px;
}
.searchbar .popup {
  display: none;
}
.sub-headerbar .searchbar {
  /*
	.search-advanced
	{
        .transition(width, .1s, linear);

        &.open
        {
    		width: 320px;
        }
    }
    */
}
.sub-headerbar .searchbar input.search {
  /*
        &:focus,&:active
        {
            position     : absolute;
            top          : 3px;
            right        : 36px;
            height       : 19px;
            border       : 1px solid #ccc;
            border-right : none;
            width:         300px;

            .transition(width, .1s, linear);
        }
        */
}
.search td {
  background-color: white;
}
.container-entry {
  background-color: white;
  _border: solid 1px white;
  zoom: 1;
  position: relative;
  min-height: 600px;
}
.container-entry .text-sidebar {
  width: 300px;
  max-width: 300px;
  min-height: 100%;
}
.container-entry .mainlinks {
  margin-top: 25px;
  line-height: 22px;
  white-space: nowrap;
  min-width: 645px;
}
.container-entry .mainlinks .navigation {
  padding: 6px 0px 0 0;
}
.container-entry .mainlinks a {
  text-decoration: none;
  font-size: 17px;
  padding: 4px;
  white-space: nowrap;
  color: #333333;
}
.container-entry .mainlinks a:hover {
  color: white;
  background-color: #ff9900;
}
.container-entry .mainlinks .compose {
  margin-right: 20px;
}
.container-entry .mainlinks .faq {
  margin-left: 10px;
}
.container-entry.container-question .text-sidebar {
  background-color: white;
  z-index: 3;
}
.container-entry.container-question h1 {
  margin-top: 25px;
  margin-bottom: 0px;
}
.container-entry.container-question .container-content {
  border-left: none;
  border-right: none;
}
.container-entry.container-question .answer-list-header {
  border-bottom: 1px solid #CCCCCC;
  margin: 50px 0 20px;
}
.container-entry.container-question .answer-list-header .ui-tabs-nav a span {
  border: 1px solid #f2f2f2;
  border-bottom: none;
  background-color: white;
  color: #cccccc;
}
.container-entry.container-question .answer-list-header .ui-tabs-nav .ui-tabs-selected a span {
  border: 1px solid #cccccc;
  border-bottom: none;
  color: #333333;
}
.container-entry.container-question .answer {
  margin-top: 60px;
  margin-bottom: 5px;
  padding-right: 1px;
  border-top: solid 1px #ff9900;
}
.container-entry.container-question .answer .header {
  padding: 10px 0px;
  border-style: none;
}
.container-entry.container-question .answer .header .rating-container {
  background: white;
  border-radius: 5px;
  padding: 2px 2px 0 3px;
  margin-right: 3px;
}
.container-entry.container-question .answer.first {
  margin-top: 0px;
  border-top-style: none;
}
.container-entry.container-question .answer .text {
  zoom: 1;
  background-color: transparent;
  width: 99%;
  padding: 5px 10px 25px 5px;
}
.container-question .rate-item,
.answer .rate-item {
  text-align: right;
  color: #666;
}
.container-question .rate-group,
.answer .rate-group {
  float: right;
  margin-left: 15px;
}
.question .comment-header,
.answer .comment-header {
  font-size: 16px;
  padding: 10px 10px 2px 28px;
  color: #808080;
}
.container-question .ui-tabs-panel {
  border: 0;
}
.qa-info {
  font-size: 14px;
  color: #999;
  padding: 20px 0;
}
.qa-info .commands {
  width: 20rem;
  margin-left: 2px;
  font-size: 16px;
  opacity: 0;
  -webkit-transition: opacity 0.2s linear 0ms;
  -moz-transition: opacity 0.2s linear 0ms;
  -o-transition: opacity 0.2s linear 0ms;
  transition: opacity 0.2s linear 0ms;
}
.qa-info .meta-data {
  float: left;
  margin-left: 10px;
}
.qa-info .version {
  padding-left: 5px;
  float: left;
}
.answer-row:hover .qa-info .commands,
.question:hover .qa-info .commands {
  opacity: 1;
  -webkit-transition: opacity 0.2s linear 0ms;
  -moz-transition: opacity 0.2s linear 0ms;
  -o-transition: opacity 0.2s linear 0ms;
  transition: opacity 0.2s linear 0ms;
}
.answer-row {
  zoom: 1;
}
.qa-post {
  padding-top: 10px;
}
.container-post {
  zoom: 1;
  overflow: hidden;
  position: relative;
  margin-top: 25px;
}
.container-post .preview {
  background-color: #F2F2F2;
  width: min(100%, 600px);
  padding: 3px;
  border: solid 1px #ff9900;
}
.qa-top-pager {
  position: relative;
  top: -11px;
}
.container-question {
  padding: 5px 0px;
  width: auto;
  min-height: 315px;
}
.container-question .tags .t {
  font-size: 17px;
}
.text-sidebar .header {
  font-size: 22px;
  color: white;
  background-color: #ff9900;
  padding: 8px;
  font-weight: 400;
}
.container-comments {
  margin: 5px 4px 10px 10px;
  zoom: 1;
}
.container-comments a {
  text-decoration: none;
}
.comment-header,
.comment-footer {
  font-size: 17px;
  text-align: left;
}
.comment-list {
  overflow: visible;
  padding-left: 25px;
}
.comment-list .mine .comment-author {
  font-weight: bold;
}
.comment-content {
  padding: 0px 0px 5px 0px;
  /*&.expanded pre { white-space: pre-wrap; } - not needed */
}
.comment-item {
  font-size: 13px;
  color: #666666;
  padding: 3px 0;
  min-height: 1px;
  padding-left: 0;
}
.comment-commands {
  opacity: 0.25;
  white-space: nowrap;
  -webkit-transition: opacity 0.1s linear 0ms;
  -moz-transition: opacity 0.1s linear 0ms;
  -o-transition: opacity 0.1s linear 0ms;
  transition: opacity 0.1s linear 0ms;
}
.locked {
  color: Red;
}
.text-editor {
  border: 1px solid #cccccc;
}
.msg-728x90 {
  width: 728px;
  height: 90px;
  overflow: hidden;
}
.msg-300x250 {
  width: 300px;
  height: 250px;
  overflow: hidden;
}
.content-list {
  margin-bottom: 17px;
}
.content-list-item {
  margin: 10px 0;
}
.tags {
  line-height: 190%;
}
.tags.horizontal .t {
  display: inline-block;
}
.tags .t {
  background: none repeat scroll 0 0 transparent;
  border: 1px solid #FBEDBB;
  border-radius: 12px 0 0 12px;
  line-height: 1.4;
  padding: 0 2px 2px 3px;
  position: relative;
  text-decoration: none;
  margin: 2px 5px 4px 0;
  white-space: nowrap;
}
.tags .t a {
  color: #666666;
  display: inline-block;
  margin-right: 3px;
  padding-left: 5px;
  text-overflow: ellipsis;
}
.container-breadcrumb {
  font-size: 14px;
  margin-top: 7px;
  color: #808080;
  margin: 12px 0 35px;
}
.pre-lang {
  display: -webkit-box;
  /* OLD - iOS 6-, Safari 3.1-6 */
  display: -moz-box;
  /* OLD - Firefox 19- (buggy but mostly works) */
  display: -ms-flexbox;
  /* TWEENER - IE 10 */
  display: -webkit-flex;
  /* NEW - Chrome */
  display: flex;
  /* NEW, Spec - Opera 12.1, Firefox 20+ */
  background-color: #FBEDBB;
  justify-content: space-between;
  padding: 4px 8px;
  margin-top: 5px;
  color: #999999;
  border-bottom: solid 1px #ffd044;
}
.code-keyword {
  color: Blue;
}
.code-preprocessor {
  color: gray;
}
pre.lang-terminal {
  background-color: #292929;
  color: #2FEA2E;
  font-family: 'VT323', consolas, monospace;
  font-size: 17px;
}
.pre-action-link {
  font-size: 13px;
  color: #999999;
}
.pre-action-link span {
  cursor: pointer;
  margin: 0;
  -webkit-transition: color 0.1s linear;
  -moz-transition: color 0.1s linear;
  -o-transition: color 0.1s linear;
  transition: color 0.1s linear;
}
.speech-bubble-container-down,
.speech-bubble-container-up,
.speech-bubble-container-up-right,
.speech-bubble-container-left,
.speech-bubble-container-right {
  position: relative;
}
.ie .speech-bubble-container-up,
.firefox .speech-bubble-container-up,
.chrome .speech-bubble-container-up,
.ie .speech-bubble-container-up-right,
.firefox .speech-bubble-container-up-right,
.chrome .speech-bubble-container-up-right {
  margin-top: -4px;
}
.tooltip {
  position: relative;
  text-decoration: none;
}
.tooltip .speech-bubble-container-up,
.tooltip .speech-bubble-container-down,
.tooltip .speech-bubble-container-left,
.tooltip .speech-bubble-container-right,
.tooltip .speech-bubble-container-up-right,
.tooltip .tooltip-flyout {
  display: none;
  opacity: 0;
  -webkit-transition: opacity 0.5s linear 0ms;
  -moz-transition: opacity 0.5s linear 0ms;
  -o-transition: opacity 0.5s linear 0ms;
  transition: opacity 0.5s linear 0ms;
}
.tooltip-flyout {
  position: relative;
  border: 1px solid #cccccc;
  color: #666666;
  background-color: white;
  margin: 15px;
  z-index: 2147483646;
  white-space: normal;
  font-weight: normal;
  text-align: left;
  cursor: text;
  width: 175px;
  -moz-box-shadow: 4px 4px 16px 1px rgba(0, 0, 0, 0.25);
  -webkit-box-shadow: 4px 4px 16px 1px rgba(0, 0, 0, 0.25);
  box-shadow: 4px 4px 16px 1px rgba(0, 0, 0, 0.25);
}
.micromodal {
  display: none;
}
.bottom-promo {
  height: 90px;
  margin-top: 10px;
  overflow: hidden;
}
.bottom-promo .msg-728x90 {
  width: 728px;
  margin: 0 auto;
}
.msg-728x90 {
  overflow: hidden;
  position: relative;
  height: 90px;
  min-width: 728px;
}
body .msg-728x90 {
  *float: right;
}
body .bottom-promo .msg-728x90 {
  *float: none;
}
.container-editor {
  float: left;
  width: 100%;
  zoom: 1;
  position: relative;
}
.paste-dialog {
  position: absolute;
  width: 150px;
  padding: 5px;
  background-color: white;
  border: 1px solid #ff9900;
  overflow: hidden;
  z-index: 10;
  -moz-box-shadow: 4px 4px 16px 1px rgba(0, 0, 0, 0.25);
  -webkit-box-shadow: 4px 4px 16px 1px rgba(0, 0, 0, 0.25);
  box-shadow: 4px 4px 16px 1px rgba(0, 0, 0, 0.25);
}
.new-message .toolbar {
  border: solid 1px transparent;
  _border: solid 1px white;
  padding: 1px;
  -webkit-transition: border-color 0.1s linear;
  -moz-transition: border-color 0.1s linear;
  -o-transition: border-color 0.1s linear;
  transition: border-color 0.1s linear;
  -webkit-transition: background-color 0.1s linear;
  -moz-transition: background-color 0.1s linear;
  -o-transition: background-color 0.1s linear;
  transition: background-color 0.1s linear;
}
.new-message button.toolbar {
  border: solid 1px white;
  background-color: transparent;
  padding: 0px;
  margin: 0px;
  padding: 1px;
}
.member-signin td {
  vertical-align: baseline;
}
.member-signin input[type="text"],
.member-signin input[type="email"],
.member-signin input[type="password"],
.member-signin input[type="button"],
.member-signin input[type="submit"],
.member-signin button,
.member-signin select {
  border: 1px solid #cccccc;
  padding: 0.5rem;
  width: 200px;
  margin-bottom: 10px;
}
.member-signin .forgot {
  padding: 0;
}
.member-signin a.forgot {
  color: #808080;
}
a.member-rep-box,
td.member-rep-box,
span.member-rep-box {
  padding: 0 2px;
  margin: 4px;
  text-align: center;
  border-radius: 4px;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  /*
	&.bronze	{ background-color:#EFB277; }
	&.silver	{ background-color:#DFDFDF; }
	&.gold		{ background-color:#FFCC00; }
	&.platinum	{ background-color:#CFE7FF; }
    */
}
a.member-rep-box.platinum,
td.member-rep-box.platinum,
span.member-rep-box.platinum {
  border: solid 2px #CFE7FF;
}
.member-rep-container {
  max-width: 175px;
}
.top-experts,
.experts-list {
  width: 100%;
}
.top-experts .subheader td,
.experts-list .subheader td {
  font-weight: bold;
  font-size: 16px;
  padding: 2px;
}
.top-experts tr,
.experts-list tr {
  vertical-align: top;
}
.top-experts td.name,
.experts-list td.name {
  padding: 2px 0   2px 0;
}
.top-experts td.points,
.experts-list td.points {
  padding: 2px 5px 2px 0;
  font-size: 13px;
  color: gray;
}
.top-experts td a,
.experts-list td a {
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
  display: inline-block;
  width: 115px;
}
.rating-container {
  /*
	.rating-close
	{
		font-size       : @FontSize-MediumSmall;
		font-weight     : bold;
		// display         : inline-block;
		// height          : 19px;
		padding         : 0px 7px 3px 5px;
		text-decoration : none;
		border          : 1px solid transparent;
		position        : absolute;
		right           : 1px;
		top             : -1px;
		
		&:hover { border : 1px solid @Colour-Theme1; }
	}*/
}
.rating-container .rating-votes {
  margin-left: 5px;
}
.rating-container.large-stars,
.rating-container.medium-stars,
.rating-container.small-stars {
  margin-left: 7px;
}
.rating-container.medium-stars .rating-votes,
.rating-container.medium-stars .rating-prompt,
.rating-container.medium-stars .rating-poor,
.rating-container.medium-stars .rating-good {
  line-height: 17px;
}
@media (min-width: 1024px) {
    .desktop-only {
        display: inherit;
    }

    .desktop-block-only {
        display: block;
    }

    .tablet-only,
    .tablet-block-only {
        display: none;
    }

    .mobile-only,
    .mobile-block-only {
        display: none;
    }

    .desktop-only.tablet-only {
        display: inherit;
    }

    .desktop-block-only.tablet-block-only {
        display: block;
    }

    @media (min-width: 821px) {
        .tablet-only, .mobile-only {
            display: none;
        }

        .tablet-block-only,
        .mobile-block-only {
            display: none;
        }

        .tablet-only.desktop-only {
            display: inherit;
        }

        .tablet-block-only.desktop-block-only {
            display: block;
        }

        .cc-window {
            opacity: 1;
            background-color: #ff9900;
            /*
  -webkit-transition: opacity .25s ease;
  -moz-transition: opacity .25s ease;
  -ms-transition: opacity .25s ease;
  -o-transition: opacity .25s ease;
  transition: opacity .25s ease;
  */
        }

            .cc-window.cc-invisible {
                opacity: 0;
            }

        .cc-animate.cc-revoke {
            /*
  -webkit-transition: transform .25s ease;
  -moz-transition: transform .25s ease;
  -ms-transition: transform .25s ease;
  -o-transition: transform .25s ease;
  transition: transform .25s ease;
  */
        }

            .cc-animate.cc-revoke.cc-bottom {
                transform: translateY(2em);
            }

        .cc-window,
        .cc-revoke {
            position: fixed;
            overflow: hidden;
            box-sizing: border-box;
            /* exclude padding when dealing with width */
            font-family: "Segoe UI", Arial, Sans-Serif;
            font-size: 13px;
            /* by setting the base font here, we can size the rest of the popup using CSS `em` */
            line-height: 1.5em;
            display: flex;
            flex-wrap: nowrap;
            /* the following are random unjustified styles - just because - should probably be removed */
            z-index: 9999;
        }

            .cc-window.cc-banner {
                padding: 0.7em 1.8em;
                width: 100%;
                flex-direction: row;
            }

        .cc-revoke {
            padding: 0.5em;
        }

        .cc-btn,
        .cc-link,
        .cc-close,
        .cc-revoke {
            cursor: pointer;
        }

        .cc-link {
            opacity: 0.8;
            display: inline-block;
            padding: 0.2em;
            text-decoration: underline;
        }

            .cc-link:active,
            .cc-link:visited {
                color: initial;
            }

        .cc-btn {
            display: block;
            padding: 0.4em 0.8em;
            font-size: 0.9em;
            font-weight: bold;
            border-width: 2px;
            border-style: solid;
            text-align: center;
            white-space: nowrap;
        }

        .cc-banner .cc-btn:last-child {
            min-width: 110px;
            margin-left: 10px;
        }

        .cc-highlight .cc-btn:first-child {
            background-color: transparent;
            border-color: transparent;
        }

        .cc-revoke.cc-bottom {
            bottom: 0;
            left: 3em;
            border-top-left-radius: 0.5em;
            border-top-right-radius: 0.5em;
        }

        .cc-bottom {
            bottom: 1em;
        }

        .cc-window.cc-banner {
            align-items: center;
        }

        .cc-banner.cc-bottom {
            left: 0;
            right: 0;
            bottom: 0;
        }

        .cc-banner .cc-message {
            flex: 1;
        }

        .cc-compliance {
            display: flex;
            align-items: center;
            align-content: space-between;
        }

            .cc-compliance > .cc-btn {
                flex: 1;
            }

        .cc-btn + .cc-btn {
            margin-left: 0.5em;
        }

        .clearfix {
            *zoom: 1;
        }

            .clearfix:after {
                clear: both;
            }

            .clearfix:before,
            .clearfix:after {
                content: " ";
                display: table;
            }

</style>
<link rel="stylesheet" type="text/css" href="https://codeproject.freetls.fastly.net/App_Themes/CodeProject/Css/Main.min.css?dt=2.8:2024-05-23:1" media="all" onload="if(media!=&quot;all&quot;)media=&quot;all&quot;">
<noscript><link rel='stylesheet' type='text/css' href='https://codeproject.freetls.fastly.net/App_Themes/CodeProject/Css/Main.min.css?dt=2.8:2024-05-23:1'></noscript>

<style type="text/css">
div.grippie { background:#eee url(https://codeproject.freetls.fastly.net/images/gripH.png) no-repeat scroll center 2px;
border-color:#ddd;
border-style:solid;
border-width:0pt 1px 1px;
cursor:s-resize;
height:9px;
overflow:hidden;
}
.resizable-control textarea {
display:block;
margin-bottom:0pt;
width:95%;
height: 20%;
}

</style>

<script type="text/javascript" async="" src="https://www.gstatic.cn/recaptcha/releases/joHA60MeME-PNviL59xVH9zs/recaptcha__zh_cn.js" crossorigin="anonymous" integrity="sha384-do25PiVFWbtADSOr3bfUQtKE6VbdyaWoLl0LNM0yNC1B188yO6CkDtC9Bd+1cqpB"></script><script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js" defer=""></script>
<script type="text/javascript" src="https://codeproject.freetls.fastly.net/script/JS/spin.min.js" defer=""></script>
<script type="text/javascript" src="https://codeproject.freetls.fastly.net/script/Content/JS/editor.min.js?dt=2.8:2024-05-23:1" defer=""></script>
<script type="text/javascript" src="https://www.recaptcha.net/recaptcha/api.js" defer=""></script>
<script type="text/javascript" src="https://codeproject.freetls.fastly.net/script/Answers/JS/qa.min.js?dt=2.8:2024-05-23:1" defer=""></script>
<script type="text/javascript" src="https://accounts.google.com/gsi/client" defer="" async=""></script>
<script type="text/javascript" src="/script/JS/PasswordStrength.min.js" defer=""></script>
<script type="text/javascript" src="/script/JS/advertisement.min.js" defer=""></script>
<script type="text/javascript" src="/a.min.js?v=1.3?r=2.8:2024-05-23:1" defer=""></script>

<meta http-equiv="content-language" content="en-US">
<meta charset="UTF-8">
<meta name="Description" content="Free source code and tutorials for Software developers and Architects.; Updated: 29 Apr 2024">
<meta name="Keywords" content="Free source code, tutorials">
<meta name="Author" content="CodeProject">
<meta name="Rating" content="General">
<meta name="Revisit-After" content="1 days">
<meta name="application-name" content="CodeProject">
<meta name="google-translate-customization" content="d908bb7ce7aff658-4c2f3a504525c916-g629383f736781a8a-13">

<meta name="msapplication-navbutton-color" content="#FF9900">
<meta name="msapplication-tooltip" content="For those who code.">
<meta name="msapplication-starturl" content="https://www.codeproject.com/?pinned=true">
<meta name="msapplication-task" content="name=Homepage;action-uri=https://www.codeproject.com/;icon-uri=https://www.codeproject.com/favicon/favicon.ico">
<meta name="msapplication-task" content="name=Latest Articles;action-uri=https://www.codeproject.com/script/articles/Latest.aspx;icon-uri=https://www.codeproject.com/favicon/favicon.ico">
<meta name="msapplication-task" content="name=Questions and Answers;action-uri=https://www.codeproject.com/script/Answers/;icon-uri=https://www.codeproject.com/favicon/favicon.ico">
<meta name="msapplication-task" content="name=The Lounge;action-uri=https://www.codeproject.com/Lounge.aspx;icon-uri=https://www.codeproject.com/favicon/favicon.ico">

<link rel="dns-prefetch" href="//ajax.googleapis.com"> 
<link rel="canonical" href="/Questions/5381388/How-do-I-detect-spots-on-tablets">

<link rel="alternate" type="application/rss+xml" title="CodeProject Latest articles - All Topics" href="https://www.codeproject.com/WebServices/ArticleRSS.aspx?cat=1">
<link rel="alternate" type="application/rss+xml" title="CodeProject Latest articles - Python" href="https://www.codeproject.com/WebServices/ArticleRSS.aspx?cat=34">
<link rel="alternate" type="application/rss+xml" title="CodeProject Lounge Postings" href="https://www.codeproject.com/webservices/LoungeRSS.aspx">
<meta name="robots" content="index, follow">

<link rel="search" type="application/opensearchdescription+xml" title="CodeProject" href="https://www.codeproject.com/info/OpenSearch.xml">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<link rel="apple-touch-icon" sizes="144x144" href="/favicon/apple-touch-icon.png"> 
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png"> 
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png"> 
<link rel="manifest" href="/favicon/manifest.json"> 
<link rel="mask-icon" href="/favicon/safari-pinned-tab.svg" color="#ff9900"><base target="_top">


<script type="text/javascript">
function defrm () { /* thanks twitter */
    document.write = '';
    window.top.location = window.self.location;
    setTimeout(function() { document.body.innerHTML = ''; }, 0);
    window.self.onload = function(evt) { document.body.innerHTML = ''; };
}

if (window.top !== window.self) {
    try {
        if (window.top.location.host) { /* will throw for all except chrome */ }
        else { defrm(); /* chrome */ }
    } catch (ex) { defrm(); /* everyone else */ }
}

// Specific case where a site is screwing with us.
if (typeof(DemoUrl) !== 'undefined') {
    document.write(unescape('%3Cme') + 'ta http' + '-equiv="re' + 'fresh con' +
                           'tent="1;url=' + DemoUrl + unescape('"%3CE'));
}
</script>





    <script async="" type="text/javascript" src="https://www.googletagmanager.com/gtag/js?id=G-YZNPNQ0F2S"></script>
    <script type="text/javascript">
        window.dataLayer = window.dataLayer || [];
        function gtag() { dataLayer.push(arguments); }
        gtag('js', new Date());

        gtag('config', 'G-YZNPNQ0F2S' );
    </script>
<link id="googleidentityservice" type="text/css" media="all" rel="stylesheet" href="https://accounts.google.com/gsi/style"><style id="googleidentityservice_button_styles">.qJTHM{-webkit-user-select:none;color:#202124;direction:ltr;-webkit-touch-callout:none;font-family:"Roboto-Regular",arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:400;margin:0;overflow:hidden;-webkit-text-size-adjust:100%}.ynRLnc{left:-9999px;position:absolute;top:-9999px}.L6cTce{display:none}.bltWBb{word-break:break-all}.hSRGPd{color:#1a73e8;cursor:pointer;font-weight:500;text-decoration:none}.Bz112c-W3lGp{height:16px;width:16px}.Bz112c-E3DyYd{height:20px;width:20px}.Bz112c-r9oPif{height:24px;width:24px}.Bz112c-uaxL4e{-webkit-border-radius:10px;border-radius:10px}.LgbsSe-Bz112c{display:block}.S9gUrf-YoZ4jf,.S9gUrf-YoZ4jf *{border:none;margin:0;padding:0}.fFW7wc-ibnC6b>.aZ2wEe>div{border-color:#4285f4}.P1ekSe-ZMv3u>div:nth-child(1){background-color:#1a73e8!important}.P1ekSe-ZMv3u>div:nth-child(2),.P1ekSe-ZMv3u>div:nth-child(3){background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,#1a73e8,#1a73e8)!important}.haAclf{display:inline-block}.nsm7Bb-HzV7m-LgbsSe{-webkit-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background-color .218s,border-color .218s;transition:background-color .218s,border-color .218s;-webkit-user-select:none;-webkit-appearance:none;background-color:#fff;background-image:none;border:1px solid #dadce0;color:#3c4043;cursor:pointer;font-family:"Google Sans",arial,sans-serif;font-size:14px;height:40px;letter-spacing:0.25px;outline:none;overflow:hidden;padding:0 12px;position:relative;text-align:center;vertical-align:middle;white-space:nowrap;width:auto}@media screen and (-ms-high-contrast:active){.nsm7Bb-HzV7m-LgbsSe{border:2px solid windowText;color:windowText}}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe{font-size:14px;height:32px;letter-spacing:0.25px;padding:0 10px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe{font-size:11px;height:20px;letter-spacing:0.3px;padding:0 8px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe{padding:0;width:40px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.pSzOP-SxQuSe{width:32px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.purZT-SxQuSe{width:20px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK{-webkit-border-radius:20px;border-radius:20px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK.pSzOP-SxQuSe{-webkit-border-radius:16px;border-radius:16px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK.purZT-SxQuSe{-webkit-border-radius:10px;border-radius:10px}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc{border:none;color:#fff}.nsm7Bb-HzV7m-LgbsSe.MFS4be-v3pZbf-Ia7Qfc{background-color:#1a73e8}.nsm7Bb-HzV7m-LgbsSe.MFS4be-JaPV2b-Ia7Qfc{background-color:#202124;color:#e8eaed}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:18px;margin-right:8px;min-width:18px;width:18px}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:14px;min-width:14px;width:14px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:10px;min-width:10px;width:10px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin-left:8px;margin-right:-4px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin:0;padding:10px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{padding:8px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{padding:4px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;display:-webkit-box;display:-webkit-flex;display:flex;justify-content:center;-webkit-align-items:center;align-items:center;background-color:#fff;height:36px;margin-left:-10px;margin-right:12px;min-width:36px;width:36px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf .nsm7Bb-HzV7m-LgbsSe-Bz112c,.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin:0;padding:0}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{height:28px;margin-left:-8px;margin-right:10px;min-width:28px;width:28px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{height:16px;margin-left:-6px;margin-right:8px;min-width:16px;width:16px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{-webkit-border-radius:3px;border-radius:3px;margin-left:2px;margin-right:0;padding:0}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{-webkit-border-radius:18px;border-radius:18px}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{-webkit-border-radius:14px;border-radius:14px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{-webkit-border-radius:8px;border-radius:8px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-bN97Pc-sM5MNb{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-flex-direction:row;flex-direction:row;justify-content:space-between;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;height:100%;position:relative;width:100%}.nsm7Bb-HzV7m-LgbsSe .oXtfBe-l4eHX{justify-content:center}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-BPrWId{-webkit-flex-grow:1;flex-grow:1;font-family:"Google Sans",arial,sans-serif;font-weight:500;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-BPrWId{font-weight:300}.nsm7Bb-HzV7m-LgbsSe .oXtfBe-l4eHX .nsm7Bb-HzV7m-LgbsSe-BPrWId{-webkit-flex-grow:0;flex-grow:0}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-MJoBVe{-webkit-transition:background-color .218s;transition:background-color .218s;bottom:0;left:0;position:absolute;right:0;top:0}.nsm7Bb-HzV7m-LgbsSe:hover,.nsm7Bb-HzV7m-LgbsSe:focus{-webkit-box-shadow:none;box-shadow:none;border-color:#d2e3fc;outline:none}.nsm7Bb-HzV7m-LgbsSe:hover .nsm7Bb-HzV7m-LgbsSe-MJoBVe,.nsm7Bb-HzV7m-LgbsSe:focus .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(66,133,244,.04)}.nsm7Bb-HzV7m-LgbsSe:active .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(66,133,244,.1)}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:hover .nsm7Bb-HzV7m-LgbsSe-MJoBVe,.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:focus .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(255,255,255,.24)}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:active .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(255,255,255,.32)}.nsm7Bb-HzV7m-LgbsSe .n1UuX-DkfjY{-webkit-border-radius:50%;border-radius:50%;display:-webkit-box;display:-webkit-flex;display:flex;height:20px;margin-left:-4px;margin-right:8px;min-width:20px;width:20px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId{font-family:"Roboto";font-size:12px;text-align:left}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .ssJRIf,.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff .fmcmS{overflow:hidden;text-overflow:ellipsis}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;color:#5f6368;fill:#5f6368;font-size:11px;font-weight:400}.nsm7Bb-HzV7m-LgbsSe.jVeSEe.MFS4be-Ia7Qfc .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff{color:#e8eaed;fill:#e8eaed}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff .Bz112c{height:18px;margin:-3px -3px -3px 2px;min-width:18px;width:18px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{-webkit-border-top-left-radius:0;border-top-left-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;margin-left:12px;margin-right:-10px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{-webkit-border-radius:18px;border-radius:18px}.L5Fo6c-sM5MNb{border:0;display:block;left:0;position:relative;top:0}.L5Fo6c-bF1uUb{-webkit-border-radius:4px;border-radius:4px;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0}.L5Fo6c-bF1uUb:focus{border:none;outline:none}sentinel{}</style><style type="text/css"></style><style type="text/css"></style><style></style><meta http-equiv="origin-trial" content="AlK2UR5SkAlj8jjdEc9p3F3xuFYlF6LYjAML3EOqw1g26eCwWPjdmecULvBH5MVPoqKYrOfPhYVL71xAXI1IBQoAAAB8eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiV2ViVmlld1hSZXF1ZXN0ZWRXaXRoRGVwcmVjYXRpb24iLCJleHBpcnkiOjE3NTgwNjcxOTksImlzU3ViZG9tYWluIjp0cnVlfQ=="><meta http-equiv="origin-trial" content="Amm8/NmvvQfhwCib6I7ZsmUxiSCfOxWxHayJwyU1r3gRIItzr7bNQid6O8ZYaE1GSQTa69WwhPC9flq/oYkRBwsAAACCeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiV2ViVmlld1hSZXF1ZXN0ZWRXaXRoRGVwcmVjYXRpb24iLCJleHBpcnkiOjE3NTgwNjcxOTksImlzU3ViZG9tYWluIjp0cnVlfQ=="><meta http-equiv="origin-trial" content="A/ERL66fN363FkXxgDc6F1+ucRUkAhjEca9W3la6xaLnD2Y1lABsqmdaJmPNaUKPKVBRpyMKEhXYl7rSvrQw+AkAAACNeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiRmxlZGdlQmlkZGluZ0FuZEF1Y3Rpb25TZXJ2ZXIiLCJleHBpcnkiOjE3MTkzNTk5OTksImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9"><meta http-equiv="origin-trial" content="A6OdGH3fVf4eKRDbXb4thXA4InNqDJDRhZ8U533U/roYjp4Yau0T3YSuc63vmAs/8ga1cD0E3A7LEq6AXk1uXgsAAACTeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiRmxlZGdlQmlkZGluZ0FuZEF1Y3Rpb25TZXJ2ZXIiLCJleHBpcnkiOjE3MTkzNTk5OTksImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9"><script src="https://securepubads.g.doubleclick.net/pagead/managed/js/gpt/m202405230101/pubads_impl.js?cb=31083985" async=""></script><script async="" src="https://fundingchoicesmessages.google.com/i/6839?ers=3"></script></head>

<body class="edge edge125" itemscope="" itemtype="http://schema.org/QAPage"><div class="cc-revoke cc-bottom cc-animate cc-color-override--316233370" style="display: none;">Cookie Policy</div><div role="dialog" aria-live="polite" aria-label="cookieconsent" aria-describedby="cookieconsent:desc" class="cc-window cc-banner cc-type-opt-in-out cc-theme-edgeless cc-bottom cc-color-override--316233370 " style=""><!--googleoff: all--><span id="cookieconsent:desc" class="cc-message">Like every other website we use cookies. By using our site you acknowledge that you have read and understand our <a href="/info/cookie.aspx">Cookie Policy</a>, <a href="/info/privacy.aspx">Privacy Policy</a>, and our <a href="/info/TermsOfUse.aspx">Terms of Service</a>. <a aria-label="learn more about cookies" role="button" tabindex="0" class="cc-link" href="https://www.codeproject.com/info/privacy.aspx" rel="noopener noreferrer nofollow" target="_blank">Learn more</a></span><div class="cc-compliance cc-highlight"><a aria-label="dismiss cookie message" role="button" tabindex="0" class="cc-btn cc-dismiss">Ask me later</a><a aria-label="deny cookies" role="button" tabindex="0" class="cc-btn cc-deny">Decline</a><a aria-label="allow cookies" role="button" tabindex="0" class="cc-btn cc-allow">Allow cookies</a></div><!--googleon: all--></div>

	<div id="ctl00_ctl00_OneTap_OneTap">
    <div id="g_id_onload" data-client_id="857795997829.apps.googleusercontent.com" data-login_uri="/script/Membership/OAuthLogOn.aspx?auth=Google">
    </div>
</div>



<a class="access-link" href="#Main"><img alt="Click here to Skip to main content" src="https://codeproject.freetls.fastly.net/images/t.gif"></a>

    <div class="page-background">

	
	<div id="ctl00_ctl00_STM" class="site-top-menu fixed">
		<div class="main-content">
			

<div class="container memberbar clearfix flex-container flex-extend">

	<div id="ctl00_ctl00_MemberBar_GenInfo" class="flex-item align-left">15,904,494 members</div>

	<div class="flex-item">
		
	</div>

	<div class="flex-item align-right">

		

		

		

			<script type="text/javascript">//<!--
			function doSubmit(secure)
			{
				if (secure)
					document.signinForm.action = "https://www.codeproject.com/script/Membership/LogOn.aspx?rp=%2fQuestions%2f5381388%2fHow-do-I-detect-spots-on-tablets"
				else
					document.signinForm.action = "https://www.codeproject.com/script/Membership/LogOn.aspx?rp=%2fQuestions%2f5381388%2fHow-do-I-detect-spots-on-tablets"
				document.signinForm.submit();
				return true;
			}//-->
			</script>

			<a name="SignUp"></a>
			<span class="member-signin">
				<a data-micromodal-trigger="modal-1" href="javascript:;">Sign in</a>
				<!--<a href="https://www.codeproject.com/script/Membership/LogOn.aspx?rp=%2fQuestions%2f5381388%2fHow-do-I-detect-spots-on-tablets">Sign in</a>-->

				<div class="micromodal" id="modal-1" aria-hidden="true">

					<div class="modal__overlay" tabindex="-1" data-micromodal-close="">
					  <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">

						<header class="modal_header">
							<h4 class="modal_title" id="modal-1-title">
								Sign in
							</h4>
							<button class="modal_close" aria-label="Close modal" data-micromodal-close=""></button>
						</header>

						<form name="signinForm" id="signinForm" action="https://www.codeproject.com/script/Membership/LogOn.aspx?rp=%2fQuestions%2f5381388%2fHow-do-I-detect-spots-on-tablets" method="post" class="tight align-left">

							
							<input id="FormName" name="FormName" value="MenuBarForm" type="hidden">

							<div>Email</div>
							<div><input type="email" name="Email" id="Email" autocomplete="email"></div>
							<div>Password</div>
							<div><input type="password" name="Password" id="Password" autocomplete="current-password"></div>
							<div class="action">
								<input type="hidden" name="fld_quicksign" value="true">
								<input type="submit" value="Sign in" class="signin" onclick="return doSubmit(false);">
								<input id="joinBtn" type="button" class="create hidden" onclick="return Join();" value="Join" style="visibility: visible;">
							</div>

							<div class="container">						
								<a id="ctl00_ctl00_MemberBar_SendPassword" class="forgot" href="/script/Membership/SendPassword.aspx?rp=/Questions/5381388/How-do-I-detect-spots-on-tablets">Forgot your password?</a>
							</div>
						</form>

						<hr class="divider-dark">

						Sign in with &nbsp;<a class="oauth" alt="Sign in using Github" title="Sign in using Github" href="/script/Membership/OAuthLogOn.aspx?auth=GitHub"><img src="/script/Membership/Images/octicons_github-lg.png" style="vertical-align:middle;padding-right:3px;border:0;"></a>
<a class="oauth" alt="Sign in using Facebook" title="Sign in using Facebook" href="/script/Membership/OAuthLogOn.aspx?auth=Facebook"><img src="/script/Membership/Images/facebook-lg.png" style="vertical-align:middle;padding-right:3px;border:0;"></a>
<a class="oauth" alt="Sign in using Google" title="Sign in using Google" href="/script/Membership/OAuthLogOn.aspx?auth=Google"><img src="/script/Membership/Images/google-plus-lg.png" style="vertical-align:middle;padding-right:3px;border:0;"></a>
<a class="oauth" alt="Sign in using Microsoft" title="Sign in using Microsoft" href="/script/Membership/OAuthLogOn.aspx?auth=Microsoft"><img src="/script/Membership/Images/microsoft-lg.png" style="vertical-align:middle;padding-right:3px;border:0;"></a>



					  </div>
					</div>
				  </div>

            </span>
		
	</div>
</div>
		</div>
	</div>

	
	<div id="ctl00_ctl00_SH" class="site-header fixed">
		<div class="main-content">
			<div class="logo"><a href="/"><img id="ctl00_ctl00_Logo" tabindex="1" title="CodeProject" src="https://codeproject.freetls.fastly.net/App_Themes/CodeProject/Img/logo250x135.gif" alt="Home" style="height:135px;width:250px;border-width:0px;"></a></div>
			<div class="promo"><div class="msg-728x90" data-format="728x90" data-type="ad" data-publisher="lqm.codeproject.site" data-zone="ros" data-country="US" data-tags="Python, OpenCV,pos_top"><noscript><a href="https://pubads.g.doubleclick.net/gampad/jump?iu=/6839/lqm.codeproject.site/ros&sz=728x90&c=274888"><img src="https://pubads.g.doubleclick.net/gampad/jump?iu=/6839/lqm.codeproject.site/ros&sz=728x90&c=274888"  width="728px" height="90px" target="_blank"/></a></noscript><div id="div-gpt-ad-lqm.codeproject.site/ros-1" style="height: 90px; width: 728px; box-sizing: border-box; border: 0px; font-size: 0px;"></div></div></div>
		</div>
	</div>

	
	<div id="ctl00_ctl00_TPR" class="sub-headerbar flex-container flex-extend flex-wrap fixed">
		<div class="flex-item" style="min-width:20rem">
			

<div class="navbar clearfix">
<ul class="navmenu openable">

<li class="desktop-only"><a id="ctl00_ctl00_TopNavBar_Home" href="https://www.codeproject.com">home</a>


</li><li class="openable"><a id="ctl00_ctl00_TopNavBar_Art" class="down" href="/script/Articles/Latest.aspx">articles</a>

	<ul>
		<li class="openable"><a id="ctl00_ctl00_TopNavBar_ArtTopicList" class="fly" onmouseover="navBarMenu.ShowMap(this, 'ctl00_ctl00_TopNavBar_MapFlyout');" href="/script/Content/SiteMap.aspx">Browse Topics<span class="has-submenu">&gt;</span></a><ul id="ctl00_ctl00_TopNavBar_MapFlyout" class="taxonomy">
			<li>
				<div id="siteMap"></div>
			</li>
			</ul>
		</li>
		<li><a id="ctl00_ctl00_TopNavBar_ArtLatestArts" class="fly" href="/script/Articles/Latest.aspx">Latest Articles</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_ArtTop" class="fly" href="/script/Articles/TopArticles.aspx?ta_so=5">Top Articles</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_ArtGuide" class="fly" href="/info/Submit.aspx">Posting/Update Guidelines</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_ArtHelpForum" class="fly" href="/Forums/1641/Article-Writing">Article Help Forum</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_ArtPostArticle" class="fly highlight1" href="/script/Articles/Submit.aspx">
			<img src="https://codeproject.freetls.fastly.net/images/write13.png" width="13" height="13"> Submit an article or tip
			</a></li>
        
		<li><a id="ctl00_ctl00_TopNavBar_ArtImportGitHub" class="fly highlight3" href="/script/Articles/ImportArticle.aspx">
			<img src="https://codeproject.freetls.fastly.net/images/write13.png" width="13" height="13"> Import GitHub Project
			</a></li>
        
		<li><a id="ctl00_ctl00_TopNavBar_ArtPostBlog" class="fly highlight2" href="/script/Articles/BlogFeed.aspx">
			<img src="https://codeproject.freetls.fastly.net/images/write13.png" width="13" height="13"> Import your Blog
			</a></li>		
        
        <li class="last"></li>
	</ul>

</li>



<li class="openable">
<a id="ctl00_ctl00_TopNavBar_Answers" class=" selected" href="/script/Answers/List.aspx?tab=active">
    <span class="desktop-only tablet-only">quick answers</span><span class="mobile-only">Q&amp;A</span>
</a>
	<ul>
		

		<li><a id="ctl00_ctl00_TopNavBar_QAAsk" class="fly highlight2" href="/Questions/ask.aspx"><img src="https://codeproject.freetls.fastly.net/images/write13.png" width="13" height="13"> Ask a Question</a></li>

		<li><a id="ctl00_ctl00_TopNavBar_QAUnanswered" class="fly" href="/script/Answers/List.aspx?tab=unanswered">View Unanswered Questions</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_QALatest" class="fly" href="/script/Answers/List.aspx?tab=active">View All Questions</a></li>
        
				<li><a id="ctl00_ctl00_TopNavBar_QATR_ctl00_Tag" class="fly" href="/script/Answers/List.aspx?tab=active&amp;amp;alltags=true&amp;amp;tags=81" style="padding-left:30px">View C# questions</a></li>
			
				<li><a id="ctl00_ctl00_TopNavBar_QATR_ctl01_Tag" class="fly" href="/script/Answers/List.aspx?tab=active&amp;amp;alltags=true&amp;amp;tags=78" style="padding-left:30px">View C++ questions</a></li>
			
				<li><a id="ctl00_ctl00_TopNavBar_QATR_ctl02_Tag" class="fly" href="/script/Answers/List.aspx?tab=active&amp;amp;alltags=true&amp;amp;tags=87" style="padding-left:30px">View Javascript questions</a></li>
			
				<li><a id="ctl00_ctl00_TopNavBar_QATR_ctl03_Tag" class="fly" href="/script/Answers/List.aspx?tab=active&amp;amp;alltags=true&amp;amp;tags=83" style="padding-left:30px">View Visual&nbsp;Basic questions</a></li>
			
				<li><a id="ctl00_ctl00_TopNavBar_QATR_ctl04_Tag" class="fly" href="/script/Answers/List.aspx?tab=active&amp;amp;alltags=true&amp;amp;tags=268" style="padding-left:30px">View Python questions</a></li>
			
    
		<li class="last"></li>
	</ul>

</li>



<li class="openable"><a id="ctl00_ctl00_TopNavBar_Forums" href="/script/Forums/List.aspx">
        <span class="desktop-only tablet-only">discussions</span><span class="mobile-only">forums</span>
</a>

	<ul>
		<li><a id="ctl00_ctl00_TopNavBar_CodeProjectAI" class="fly" href="/Feature/CodeProjectAI-Discussions.aspx">CodeProject.AI Server</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_MessageBoardsAll" class="fly" href="/script/Forums/List.aspx">All Message Boards...</a></li>
		<li class="openable"><a class="fly" style="padding-left:30px" href="/Forums/1580997/Application-Lifecycle">Application Lifecycle<span class="has-submenu">&gt;</span></a>
<ul class="openable"><li><a class="fly" href="/Forums/1533717/Running-a-Business">Running a Business</a></li>
<li><a class="fly" href="/Forums/1533716/Sales-Marketing">Sales / Marketing</a></li>
<li><a class="fly" href="/Forums/1651/Collaboration-Beta-Testing">Collaboration / Beta Testing</a></li>
<li><a class="fly" href="/Forums/3304/Work-Issues">Work  Issues</a></li>
</ul></li>
<li><a class="fly" style="padding-left:30px" href="/Forums/369270/Design-and-Architecture">Design and Architecture</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1969389/Artificial-Intelligence">Artificial Intelligence</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/12076/ASP-NET">ASP.NET</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1580226/JavaScript">JavaScript</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1969388/Internet-of-Things">Internet of Things</a>
</li>
<li class="openable"><a class="fly" style="padding-left:30px" href="/Forums/1647/C-Cplusplus-MFC">C / C++ / MFC<span class="has-submenu">&gt;</span></a>
<ul class="openable"><li><a class="fly" href="/Forums/4486/ATL-WTL-STL">ATL /  WTL / STL</a></li>
<li><a class="fly" href="/Forums/3785/Managed-Cplusplus-CLI">Managed C++/CLI</a></li>
</ul></li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1649/Csharp">C#</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1627782/Free-Tools">Free Tools</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1827460/Objective-C-and-Swift">Objective-C and Swift</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1725/Database">Database</a>
</li>
<li class="openable"><a class="fly" style="padding-left:30px" href="/Forums/186301/Hardware-Devices">Hardware &amp; Devices<span class="has-submenu">&gt;</span></a>
<ul class="openable"><li><a class="fly" href="/Forums/1644/System-Admin">System Admin</a></li>
</ul></li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1606152/Hosting-and-Servers">Hosting and Servers</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1643/Java">Java</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1942421/Linux-Programming">Linux Programming</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1988311/Python">Python</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1650/NET-Core-and-Framework">.NET (Core and Framework)</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1848626/Android">Android</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1876716/iOS">iOS</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/13695/Mobile">Mobile</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1004257/WPF">WPF</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1646/Visual-Basic">Visual Basic</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1640/Web-Development">Web Development</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/suggestions.aspx">Site Bugs / Suggestions</a>
</li>
<li><a class="fly" style="padding-left:30px" href="/Forums/1652005/Spam-and-Abuse-Watch">Spam and Abuse Watch</a>
</li>

		<li class="last"></li>
	</ul>

</li>

<li class="openable"><a id="ctl00_ctl00_TopNavBar_Features" href="/Feature/">
      <span class="desktop-only tablet-only">features</span><span class="mobile-only">features</span>
</a>

	<ul>
		<li><a id="ctl00_ctl00_TopNavBar_Comps" class="fly" href="/script/Contests/CurrentCompetitions.aspx?cmpTpId=3&amp;amp;awsac=true">Competitions</a></li>
        
		<li><a id="ctl00_ctl00_TopNavBar_News" class="fly" href="/script/News/List.aspx">News</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_Insider" class="fly" href="/Feature/Insider/">The Insider Newsletter</a></li>
    	<li><a id="ctl00_ctl00_TopNavBar_DailyBuild" class="fly" href="/Feature/DailyBuild">The Daily Build Newsletter</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_Newsletters" class="fly" href="/script/Mailouts/Archive.aspx?mtpid=1">Newsletter archive</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_Surveys" class="fly" href="/script/Surveys/List.aspx">Surveys</a></li>
		
        
		<li><a id="ctl00_ctl00_TopNavBar_Stuff" class="fly" href="/Info/Stuff.aspx">CodeProject Stuff</a></li>
		<li class="last"></li>
	</ul>

</li>


<li class="openable"><a id="ctl00_ctl00_TopNavBar_Lounge" href="/Lounge.aspx">
            <span class="desktop-only tablet-only">community</span><span class="mobile-only">lounge</span>
</a>

	<ul>
		<li><a id="ctl00_ctl00_TopNavBar_WhosWho" class="fly" href="/script/Membership/Profiles.aspx">Who's Who</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_MVPs" class="fly break" href="/script/Contests/Winners.aspx?obtid=1&amp;amp;cmpTpId=2&amp;amp;cid=0">Most Valuable Professionals</a></li>

		<li><a id="ctl00_ctl00_TopNavBar_LoungeLnk" class="fly highlight2" href="/Lounge.aspx">The Lounge &nbsp;</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_SiteBlog" class="fly break" href="/Members/CodeProject#_comments">The CodeProject Blog</a></li>

		<li><a id="ctl00_ctl00_TopNavBar_WhereAmILink" class="fly" href="/Forums/1939564/Where-I-am-Member-Photos">Where I Am: Member Photos</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_InsiderLnk" class="fly" href="/Insider.aspx">The Insider News</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_WeirdWonderful" class="fly" href="/Feature/WeirdAndWonderful.aspx">The Weird &amp; The Wonderful</a></li>

		<li class="last"></li>
	</ul>

</li>


<li class="openable" style="margin-left:20px"><a id="ctl00_ctl00_TopNavBar_Help" href="/KB/FAQs/">
    <span class="desktop-only tablet-only">help</span><span class="mobile-only">?</span>
</a>


	<ul>
		<li><a id="ctl00_ctl00_TopNavBar_HelpWhatIs" class="fly" href="/info/guide.aspx">What is 'CodeProject'?</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_HelpGeneral" class="fly break" href="/KB/FAQs/">General FAQ</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_HelpPostQuestion" class="fly break highlight2" href="/Questions/ask.aspx">Ask a Question</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_HelpBugs" class="fly" href="/suggestions.aspx">Bugs and Suggestions</a></li>
		<li><a id="ctl00_ctl00_TopNavBar_HelpArticles" class="fly" href="/Forums/1641/Article-Writing">Article Help Forum</a></li>
		
		
		
		
		<li><a id="ctl00_ctl00_TopNavBar_HelpAboutUs" class="fly" href="/info/about.aspx">About Us</a></li>
		<li class="last"></li>
	</ul>

</li>

</ul>

</div>
		</div>
		<div class="flex-item-tight align-right">
			

<div class="searchbar">

<form method="get" action="/search.aspx?sbo=kw" name="Search" class="tight">


<table border="0" cellspacing="0" cellpadding="0" class="search"><tbody><tr><td><input tabindex="2" class="search subdue" id="sb_tb" autocomplete="off" value="" name="q"></td><td><input type="image" src="https://codeproject.freetls.fastly.net/images/search.gif"></td></tr></tbody></table>

<div class="hover-container">
	<div id="SearchFilter" class="search-advanced small-text align-left" style="display: none;">
	<b>Search within:<br></b>
		
		<input type="radio" id="sb_kw" name="sbo" value="kw"><label for="sb_kw">Articles</label><br>
<input type="radio" id="sb_qa" name="sbo" value="qa" checked="checked"><label for="sb_qa">Quick Answers</label><br>
<input type="radio" id="sb_fm" name="sbo" value="fm"><label for="sb_fm">Messages</label><br>


		
		<div id="ctl00_ctl00_SearchBarCtrl_UseSavedFilters" class="padded-top"><input type="checkbox" id="usf" name="usf"><label for="usf">Use my saved <a target="_blank" href="https://www.codeproject.com/script/Membership/Modify.aspx#contentfilter">content filters</a></label><input type="hidden" id="usfc" name="usfc" value="false"></div>

		
		
	</div>
</div>
</form>

</div>
		</div>
		<div class="sub-headerbar-divider"></div>
	</div>		
	

	<div id="C" class="container-content-wrap fixed"> 
		<div class="container-content">

			<div class="container-breadcrumb">
			
			</div>

			
			<div id="ctl00_ctl00_ContentPane" class="container-main">

				<div class="flex-container flex-extend">

					
					
					

					
					<div style="min-height:600px" class="flex-item">

						<a name="Main"></a>

						
						

						
						

						
						


<form name="aspnetForm" method="post">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="aM+FPprO6qk/0rNUQ25djzlWQyUP/hzkBqoZ5WVEQbX5VBTabD00AFJd/qL9sW208Tj97ePEeeTLCRlBQYs+yZCNXL5st57GHI1n+QcgdaTce9TzrYc2isISWSyKYJqEu7LW5lNBhcJks3t3T0zN6RVAfxsHfaPacO9YkMEBlhLCGly7PqkdnfiQEa1t/USMwGAWg6wuTauzGbQ7BXz5B+9bWJlwA8iMzoPK4lJZvcaW9QbvcLF8ROmSsVEAei2hBmz8+Ubt0CxOHclfJLM/RY3JsEa2nt6bWop0kprCpHuUPt2GkpqDy8ojzdygPz6QZBKcJT6b/s7H91+WB+HFKZCqIPHRdAVczyfbbsQwOOqNQkUgM8553X9V30PE0PgH536T+Gk9yXuIjLxgBmvRDZuUyPE+cqqlky7LKGtPTLrQVdtTCUol3HaUzx7G57xgJc5tbzEDaeKOg48LayQx6DulQbyHv9pU5xMhAvIj4t2MEJVAnZ6TVh4OF5llDRKXaje6IvoNKaBAP72NSLd3JGnJ0kttl7jfCrGvFZio/cFB7FBawUzpqxvQmKdpWPjybeLXLKXOUn/G2Cg16jJUl2jJZILOEg/jYN1py7FuXV1rZD4aM49LyfBJ6BotDjLPiSIim6S1tWB/c1p2Y7JXT7D4/bf3C6GP5x+BiUyAe0Lgt5fHJok/3y7+S+F641CPge88pGnTasRvUUpycuwx1vzpFeQ2wTEDmgxUXNoLVnmXhb8zgbF+k/LcrUKp0yBQ60h261Ehb5L6+rJRuKGfGDK2P8Yqi89ACDwOIKxGCzakoifUJIpy2G2qQgeh4EclgeYBnI0O4ebGLzp3hYUDczuMFv+wMA/fpZTDGkEnDXkguO2DRCSqbaOEfK9FTXZFxeXMTK5qePnRzv87zGpvLAyx+f45dBK04dIEDU/HhPYtySFUKDJse2ZqWCdw5oPbMlYvlEnncRAKQLc84E++GBEsR5nK1XS0EP5R+ngYvBX+K+5ATELG6Blyiwx8Sg5HIhsswzYQRiCJuju5RBEm10FNCglgmMp3qo3rSAyGikzlspDVbeBiMbjOXsujPUDArEBtwzZ6iDPOKOPZ6d8d+v12b3ritdGemUH+EMde2tWN+Bm7+4aTeFhJRPmZv9PiL9qSe8iH4vpA5epFhOZAw2+AxDAaMJBGjeBXvpoZ5wc0bzYrsMVMl1iZUOJRfkTK5V5DGgYWorMfMuHYYsOiVfJiZYNV6DVu1IWbEQQOUZ3j7uTbjw+atEi++Ljh5Pa3/fjRimiwdE7kyH+Nj3FYTLEmx//Uwew5oisdPlk8IQ4eH2HSq4TJW+Rv9r/Yp3OGmpc3wRRcAjSGJzCqxtrKoCybZGzDn00kT74LCMurg9SuJhasekNHDB5u9IjseGk3rHojyQWczumlPSK6cbAcw1dBn9lUHlYtmXwStRvERwLvKhv/i4+CqHemN8pUt/vMGK7jfQiJEkSevSV1Dn1yv7LPM8ulvU01h7QOpjips6vWAZJZeyX2oVBliiuTVREb7BsDFAGA24E4nL8R+wmAukDWntzI6BwvbAaevBN4RA1ly1EFWuwRJYFiVkckwVwAErUiZ4yhEAtvw4GbWEPXsxJI9aY5OqK+i6vOhGrxAmXBQ14G/wQ3N9Ug/UT5Nct3clz63fIVQfzWYYAseDTVtG3tB06jJUDELfbskxclNYlrv3tqM97yLdKsgcH6VmNXwG9cfZ07flAu4CINF5WHzwSON2JbKZ+IBFGzxFC3T2kLbAK2ukuz4Tb+O+oMSN18QRxQQp8tpwm2Gt06yL8hUSRnRsXghurCcKy16Ucy25t/IN5rVtVolaQPQ/PfsSWT8Gbh/VfaM82CUu9l1tLqAuEmNRlr7e0WDMZXn/mBe6h5HQxqIDPKKQGtWMdRtpfLh4Q4VVlEd/Wg3g+RALrHWLMfPOFmA2Dl7p6esBSLFe+JZTTfSLSZC8VO8xrxUbRSE6rsYQKGd+42Zjfqdwqou9QXa6MOFbZgnkHFEkCC1docBdPryjivreB32rzhimjiVr84fkMtrdMTRR5hZ8igIS0Q7+WQ2uQFuCNvOTk75VkqMfRdW0Q7BRFX7YTgeOri6vXe7NL0kN1fRwlYwh//mf9v+KtjUMy13DDSLb25xB5IrJ+RiHBABRjYDknJUh6L8uHV1am7PLWl9RQE4aEQNi+KhKJfaatdzEEWxqQb4kR+CsfIkllWQyxcUL0O4y2ZLBHcP/3/Ug6GXtwc8jHFM8g3+9e3jpLDKRCXn31MVBC55ecfhCG/picUUdNymLNF0/+z1W1RAfQmJ6ZdTCjQ+nEDhatM0HOj2L+4B7t9Tji9QHGeBrJwidF0XyW9R2/lfV6lTcD0pqTX8TWi5Vgd4yjx7hj8rHrLZixJ+EyrnyG/RdrnqBjl8aGJEt/h3qoltxrOjJpJjE4c8WoOtmWIo7Q7tII/1oa1PB+6jwbdq+qK4EfFR1mzxRE6UegCWFOoQUn8dlm4fru1O9egz3qvaIkXJ4Y6WKIaVKqKgalW+iwUJJhBr1zNIycpqvPC+qoxzzP5i4AaEV9wCo41m61F8oRwdeHUhlwzN0rrkx7Em7HsaDjEEDIUr2B10Hr0SR+JXAPRGRK29813cXctPrN7p7dnBzzYraz3WfrsbRPLKHIJm07xJZ9rB/4J+u6tNX7bG0q/NcJeEzwbBnxlh1cyUGi5Lv6oAZ05aVy1U4QDr2lLgd3v1bQV9+2ejR12DASYJH1E3bKCdQFJqWBs/6wzqOb2W3BiM1tNTnLskCk0ErxC4XqMpy4IP5BWXvplF92sc1MV9sG9cU0KJ7LXO5Rovq6v8Wgg26HE9hMdsaM4wOfKRfIgxEl1zMu6Apa6pPloa3O4H3TJQxavzxt/vOdqcJYe9g6zikg8uiqKm6B5x/Mj7Fq5MCZj9E50n8JX1nxT/Oaqc+PyHlqg+4ah3yeopKaYRAWv7AL5sTzigbnq7SErSX4X7mUT3n2J2MucsVsmdja2+S+Ss7CxCzs7CJPQT5btUho0CfnYsf8fWfy5JVskhqE+XeVoNehu9O8Sd5SAtEfhM2J23znOkEYX/Lj2Nk1075OfiLkus/pWgoSmW14d+R1rkpCvVUtjEWpnBoSoRlsCiepUIZkDGwbd46wf7+fQPN1CEB7w+R2OJcqvFeXNSLUIojWEaie5EtTFBCs+dFEqcqq2hpfGoqdcnYEMsoIrSEa5ZtxVvaJHlWiso3mQ4DzqHlhv5lTdeFPKTpbI9b3nKgF67m6RF+xGDJvDuq+8krt+9XiY8JtjyDQqrihP+68Uh476Os8E0ZYP8peLrX6wsXtGqIGhHMbuIsiDMYSAnIYVkAvWshLabBBaak3yB12sooe9ax1yXltlsz+M4cThPK26E7vX0wD4QL63CSjpui7bCNxxTHQHhg8beF0NxsKCcS2s7k3ra4yW8dazfjf4cr/AxB90f8G8RL7toeA6J5TuQ/X30XCVJ906OkfKDYpI9NQb+8wtlUAUHUrQ0xYOqBOa0Xvtxv47+obLhH2W3IPfEoM0E9XwpnqpJyS/GdBgDC+BZ3nfXWReL8gvQTXq1l9MZptUl+RuqATPFf/mGnoXR/5slKt/zyydbODd7hJLOBQ4oG3UNsZKalLjPdWqkwNsJNsze4Xa+PWASpCnXgcFX5uat+caYR/9NHJCFeKb65+EouuBfoCqDWmRgYnPMtEyuOJiNLBTFrrDblUuodRKcAi5XhXYi3gAWt17bA/zuL3d+xYIRwdId5/U0hWmqagGZz+sVnz7S1B2h0uvQGRB5iYgNq0gTBUflQTuS4DBCgdIN7lK3Imo/7hr939/2NNP8Fy8tVokrfo+P1DSXVE7364dkdKVGH+RavxoMjje+N0cZrzi3VxYv0Xhr4ZfTIU5OHZmmCiTCs9aVGaOOllpb3Oe0qmBO9elg2AU+ZfFItHCi7LMuGZgX36mE3pAXgFii76WK3/P7TCatr4cIAtHFlj02oiJkj0GxPAAiToufBSuNkCw0PoXYK1IM9q5VVOlY7/Cqw1lgsQZKdRVCVyVXKLX9Ak11Zh1ynwJ7h8ios+8xTaB7YTHC3aAmOv+PHX1s9Od1T91e2LK7/7AQ1CIDufJ7r6tZ5+gRGPFN/3UZBftCgicB937vkXqW6YL38FQO3GiKjWfoswk81XWbNKEUrWa6u927sqKTHK8vfjSZZMz32OEyqSAYZHmrkXH2nZ3e+otCVKx9Ck0d30Es33W2g32YltcTZ75y2EOmdz0QjgTHj4sewKCvWV/F9gC49sQZFY4XldAWsNSYZlUOOuXlbcluUtkHKl3bwDiYQGcfV+LZBcNtI9cpaGPQjrMuDKrRbzh9kkZCnMVQVXbRY//GK3szsakYTKisr9YzX+oMhMlxzJMZDXQBGJs6Kzhcr2kwrd2KpK/HS4YiGbwqCP2pv7HNnihi/kF+JINUH78KuAqdfno5lHSCX6E268YYyky3vVCA+WvlZSTIvKDaykZfwadLuCmsnGrbXl5JkytKXYzSAC5FxZW5q/lHMS8KFWgKIbgul6PHdvwaK77aDQm59X7Q1nQ+tTNyhX8vQ16ZiF4q8+QBfyRkz+l7xQN3QPg/VemlRqAkkIJs8eZpsaUEQFP7I0M+2OuOW2AYjLJhZKBKcVEeV/XMw/r4r0zIs/wJXcRDBta6OI9inluTzKGY9UqUjNgNmmXdmfERFW3sk2MyAa5zr7Y4GH30cd92r1GRmV+ETJlM5ulTrRbJqM6LEtEiqCyMQeTJUXFEl/gOC9xyyn3OQrFJ9LI0J1XUmdtU64EUP6FDTZK+n5ouRzigjJ7RjUwxovNX8NsKMTAZJkBANljdykqPqEqv0AKWXpT+LQatR8MadDvY6rrBO3UTpNjivz+pR8rS341APilRVIo5SJdqi45EGov7zii8arrJoQei6G1xk/GuUhYOKz/YtJGh+qWxZOktEgxK9h1oPz2N76rpK68NbOtUoKrrTCN7sKJZ9UShPNDoh8MBb0YEq3Ts1cTblKNdELeKQJzRbJx51gx1NMQ1GXGQYLDqWB+uKotfMOd+ZcOGymdMaoycNhCK7SOfrjp9z6uybHDO9tT4ja+IEumZOoiyJiDX87YyYcWvKpVXWcWt08Hiv1a9b/AbI74r2U6pXsUF7Qd0AlIrwwtKB25bm2GteWVu1rYUXvXOwt+SXfKwELIDpQYzEGmLcc9lFzj0C4LihEar2sYro8TGlVgs+ANIiC/hOLyqC2viFR0QxTHHnoTyqstun/B1+28foK++4DRmWLYcX47RO80JLD9W8OGZjK3jpa4qCaxEJULL4RCBKoZ0b6yHD8ck9cWcynbkSIJ9jE5Iabnaab5JtYP6Aqfhy/aRLSpARi3DAXkCHGaK8Xov9ijijYDn2iCcpgFeqnxa/S2c5N+CunSGH5K4xJIRAtBPGTYk1rj3WDzV0pr3wRNC0+v1nWzXfdvA4V31EpoMPySDOacbUe9/9Iwm0dF9jDj/ep6RWe8kikkxmx0ZwpqZHBaP+ECgQXE/BsT4VHKhic2qfIJaKHv1HtgQykY+9yeuEJ2wVuez9zcr7vqA4OmXuCX+YZraoiVJvGMu3ShDRkpg3dKqyBrbUbMXxYxS3PBMnHresoXtu5YaGLLzXB5VD2mloylL6cgKHBi9ulJI55Bw1mpOs77Jehiv7pg7hYNyam22pKGVip+YBa+R6vaYQwlrpL/zltFdMZxwUKyc+VitQJnOd6VVnHR4n8VDImcksvnwXGqdgLy6f9e8L1Sr4g4FiiUwJg+RJRCE8zmarQC65rJv8h/+qsQJCHCiIWrgTtZEv0N76Mp1QXKDQt79JtV3bQ9jzD42zoL6Nw42XBADrMLhhquNNtCZLkCfx7hQU0szT9O2kassy5DoOgZMaeAJZG5hPNLw44IuC+94bY8bLACemTqxIrFQ1pgYSwQ4MG28pcty3Qy31Y7jZB7X68smeVSFlA5fd/Oo5JXzbxWPogIAiorjn4WZqCEkwoxhShUBmYf6YJJWZBVMifmSqMzC0BQMAIPVOGUIqMQleOilM91QyAcjZK0w5gOUvaSOrC9XbAH3vKHwqa4aLXB0YoKVX+uXue+0UZqtSsXUnmGSBMA2Tou2oNRLpw76P/kbQgqNNfVq6gRRraHv1mBHPcYKadAfInsE968fU7WZFDECGSdq2+N1xV49B7Z5Rj1S2PzLTEHJr3ybIu0BNBO9o5CBDjVwXZV4xwdPWTsfqNQghSKWhK54FNYFwgdJ5Tj7N9g43UsTH4YLsFAk6WATvOZ6ZNTZrpuU2uAzWj9MDy3w69MiWpfGunftvmsJQhKcHcyhMSk6B9r85fbCjpofSszoNzzEYGP8ZmoZmA1svs7+2VUpOIA0A6i0gGao+seVrlF2cpU/PdAcRZNlGGxvO6+/soFibIkEBaluNLp2RMJJX9qxGmSAlPKXC6sxjdsYVSYTLuXzlKJtFsrwjDCNQKXVPzP5LUjzkh8w4X6c5BbV8QjUm2WjskKQfzHkecONlP8+klNnnnEBJ+kRXUiaQYyH7M+pt6Cg1xjnCqLkl22k6WMg4yZ7Ew4z0cmHGRT5ch7clt9VgD+h2hrjIWlP21czbNzApgGXEJ31bgAC8CKB+IUAqie8NBKPMQX/r67co0VAi7Vd8M3wro67U+AkTj4itaP9m96oqXSGMHQCToXk9FwmF88mJD9YQrLDQS8exaRATHAQpIELmWN2M2TfvBXVggqrY+w1srSTWkN4+jlyzIj5qFPRTxIQDf/sTlVlx+6vDbWyO0kvxWTeeFt7zC63Jmyxap/PdoibLseoti8STP3z76oCqGVLXIyMARCpgCyaMoC/Sdb3SwvuTeSqxcgKjJ/TRCYfczJX1HQyE3XXL0LPG3RpEW+FqnJtINWN0A82WWq+KWALtyxt3jUJB6aat39qixBQNjzRBNrkUMaar2Iaxo2Lg5IqJoJl1vaYUzdVrFG8bzPmvhCwPGX6Oo/ew2gXOrB0Tv+9C9W371tNqFFE3hgMjI0/CCTZLiKTttF5zTVxhEjModh3LemxcTRvyb0ujb4TMWINLXiPAsgFMLTZDcMg4tgzx8gb5xKatBnDsByLekpNJu1d9f1V3QM6J7DTboo+WuaXfwRRQ8FM1OmNWHWn4Y7VApXieZVA/cuoJjt0SldXvM3t2c/RBxe/RfWNYtiSp8WE6X09HDf7+n+pwxMexKtClYJnSzBK0rRRn6RL3bsOWzynndaem9hlgLR0jLq9QUn2+AaToqZMT5tOuOkk86dGsoaCxYhtdseiQ4Gw+sIORU+QKK/PPMxtw7KcD30uqZvQIMHB7Kxr/mqIEGLS/Kqgp9aFWo33mHPrYHky5qgazLz3pEqV5ckRzT3Y98U++CWiEX0906yX0oXkKyoMS8lrDQl++5eplKgf/TAcv913cvYGrtFT0lQOiDZTiQ8O2HUgg0jHqCf/fU3Q82pK36HZ1gdEiaMjovzuUQko4DjsoSWOrswMDrTYYbD3AHwq4soaAN/zOZcw3zjnwrXBLiobJ2jfspB3FxjGlaxqdGCd+5DexoynlpOJrmPkR4ANycZNUeUMp9r60PBv6QEtUjod/mrCnppUrvQTQenTlpfDd+gRxWZSRf2AF6rp+1ijwmrMoWoQTsbY4oEkhO0i8E6NvKZ6Dx/6xLW/un9j6K/jvR6Of95Hp9YJZILi2gl2dPPgmZBBk0WaGWshpys3o7gXL3FwcpqIKKo+tDNyc1SOtdwmhhtP9tekfbp8+Idgc7c4WvRjxTsUH6l2aYfXLQScLn6s2AUqwtixWjnwjNxVfTff0+S2Uui/UL1b/8xNFh45qSg4N4ReT+N60H/bj8M73xRhUJWZIKFWOc5YaslhanTjedGr2uxWvGI3Atlu7Za5hrlujHCzTAW1L6Jz9RUr7on60o8T1r9vspzgkt5iKasQ+1bT4VNBedIETqECDNJZNwFI6SyO7MUWRY5QiMc4zVyihAjzJMg970GeiiYrhkeV9NAyZGaZDhWJpyPzqkKfsElpPp6G32annTup1VsqNHJf8VL1A2T1kP+Gp0uTFp+/a/vkb1kqUC7PjOZ8hmfxLkHgFsFcypU79bOYeC+ZiVog1RxneM0oBNDQ4hl4JKb63v25Lq8UkDy9zZ1FHMV/whxymqYUuk4N1ok4WxTJORTlYayUK5cXWmPBIr4kLjzOrPUJId6F2Pgevixa8RmaSLquphsTi/UCDS7Nbn5blZqaB3KkcsrQQQSpBjg5Ye87XwLvLHGeUFkl8CYDtps4pMA9lgAjGLoSpGO4H6+D0ljH0GuMSdUcdk2T6vimFm49whoPbjp2hh302WwX6Id6T7WfYaxfYmQrwDjbj+sGuJMNuXxn5W3jVe0pz6oIjfhVgiwo4MOUyZl6b9tm4X8R28NHoMSNciRLHMu1RZZ7qnOCrWg3PcHVmCf0Ww1fKaEuXrClc71MvwM5CwGXc4WfWGP21hW0Z4uulebPDGtLYDmVjSdZnni2aDk9EnbpxU+l/GNXSeq7DDia/TWRLmFIll3AWhh40bNu1lL6ATLuNM3WRyLuGZxYftVWFyfo4VseNZbU/JlocaOr9eYYfqbT2LLTkBrhyE3m/f5Yei9Y6IhQL7DnStnA3i5oMvl2cFS96ynehNJm+zKniN1RwchWo/hzm0zvEXRoKbUNq5qp5JIarghxvvoP5IVQsg27ThrpnI+7M6vFyhSnYtVmG9J0NdiZRXL1CWXCw5Yjd5b+wUmDCveOBqz0lBBN5LoY82jU3FOcYJnBbMRB0QLkWtInl0Mw9fHh7FgzF13K9ViVXmYjFpR2Md3F4Hj6TiI6Lcb+iETs0hLwlVz8ALDCJv4CENPFGtaQDYYlZObmSA2rwy4W0JRRqKR4ObdGXxDNON2PqwTzOF1RoHvwhjhpIFqsYkMgWuXd1Nhhyd0dzFt9eOSCM3/OshbV7w5Gucx7VV3UKBeQSXktPtv/SqRAD/Yr4pRrWksFrKrLhYRURZy6pYq2Az84xGAkPngMXVa+OoCUFr4LtcKInceTvOXegpayClW+gp2LJ1PwRYI6QKxT4dqR2wDYVoaL1MRqKCnbU5DWIS8VaIYeyNazLq/WahOuKlryjZLh/NlV9XVcb2NvrnzOaZnnSjm7DckY4hG5ZRjSJT7VcjM9JyliKQuHG7WXqMvRTTVGfkI5UKRudP7oYhO6KTvaOk7nBYGdUHKGOa3DondZw0pZQKNMh3AfiXmMvI1Wgng739o4f1wyKWyzQjuw0FacUkXHHHGx0IHidfvnwF6LNPLIDPQowEGeUOCAOcb1yAwF1bCiJwznnPKP37LCz5m3xYdRmOWD3oCuZHdMZetG168mRR45sYnyuizG5hM2rN99LEnALgNxJs1EVcalEBguhPYP1EholagyrFie/KqeT6/qu1kaVMT5pmhTn7YKk9iprhdMxDirMZvhq3jMd5X9EJgC3ww3B2eGjqtUJo4o9+wftGIn6c5hViN2fG9lq/TWheUjap39g1et/idrIp8qPbuocYkowPsThU3lf/yMCapIZTi4gDkmMCG99twgUgLVUeZXL+9sICMB/nYNIaZ6xHfHE1+xcsmzg/K5GlE5saqBte68tPDHHmqbqzGNf//J8QO9+xjoXuNenH8y9fm24ALFKHPbZQoTHghtkJbJnUxu0mksZXgReIbd/CiVEBzi8xayfIzeTtubwgXgdHEyOFwtSjfQJJ6q4zlhdY2VW1FlbXByKVGkK7IPpYbHhUr0Ao8fqxXlXWO3ErWMhWW6WVxyxAqaNJzPmAVUrvC6OVssXOC0xNhsayxqFYW/sGcLkS558DlHRbxtqGdgD3eL2HwSCv20ao5lyrHZCBinEIuT5cAdMLaCKqC3Hi4BTalTBkQvDONUEy+nPc8Dxl+uPyq70zXc4SgbC7xDZ8VPONxcHdVOMyDNksRyZzAAVNn3CuewKzI/m8k7D0Bq0BBf6xqzltcFIpUYPOneLc8UOryBxcBRptE796Ejdts7K0S2kCeVv1gSow3TDEQfirVtZMzwpKu1AFuYqD7/O1Vb651AG1UCkGDosIPatkim9o5OXnRPWyUYusXG/Y7ObDFtO4JJ+nIR/ai+8v7tG8VBMLPWTa7k/mQFZJOhzB7aXyHwstHLjpyE6Ulazmuvu7e+nvzNGxhteAsbqAxvpyeVxjFrIDe8Iw1WfUtYCZ0ole4ttauxiLJk3FWZShBXVfZoF4EFWbaozvQ37Is7ybvYCPnJ48J2gK3zYDol+pSQFG8aNIRZtk5SszBn7wehQw4pH7wok1Az5ARcX3gp/ZrWGo1qnsqpIvJHJH04EMIsOJGCeCX5StDAdG5r94Rha39kWOkBzU9CxJ2K4pSlS/Pv4QRyElmXiy5gPP4grVli/nQzO4s1Ko1APmVYI+/+he7jl8YVwMpx/N0BwWVejd0Eiet9Iv3e7rkkPAN7qcey64KQV0cT6R2J5ZVkmHakK5GfPQAoHbsVM24iuKtGDRVKscGa1TFNU5zG4MK85ZbuWiTrAbavrUh34gJSOQMIT5BdGSgjdnFshTHtNbagzPqUX7DyLXoJAg+wjOxbf6c96xT00oSnGLwEGZ3P1xLj11rMzFR7UO4rBtVzXzpxWF4q//PiW/ZqueQL7AqU0tYOKaUxpmXMhmkEa2OemYW51cPc2oAGX+HtHBPg5C7Blf5lC6tHZRw5HzxjWUi3HXyc0ZKsjkf7Ybc7vV4R6+m0XHwCV87JbnoPBxxaLFKCNIWd2myGnHD752lfmy4ClQwslv+mqcYh60k69ZXahPYtnIzZrTNRLZRgzAQndWlaDsUFlb3eOOPRhTz6E8X1nyiVl6v0fycI7I0tkncQxkYb1WAxXJESE8V3aUuhTxDGDJ4/gzNR9PcxtPt0P1+X/++h4n8fnd1LBuJv6yaWbGXrDLAa7+XHdGy/LYkEJxRS02ahLeP/SepnNUJjT4t/Xuz05k8eQYRTSsDwotHUe77KPBA20eYbqy3Ah6eERApvfx6DBre25QxU3nt86wI8pvbm0Th+mhRfmf+9mW2xi3+Ffog/mPCJx7YXdsvZVDWpZIK5ZGjOJbVCvSUvvXvuossajbKm97ly3smrdznE37/CMXTHpWqLWvJm6DtEM4HSCEjbnyPuEDxFe5N6RujSJN2Eb0n+Cp9T21e9ssNGDvOrU+eWB/vF+g59qZAQILpdFhD5Jo7k0wggURJ5cIOKqCX9yR+xVsJ+6ntvWPYjch9wbShA6VydYFQujJZEO2Ct3wQkCTSTDdXvBMaGvsolpRV6hAfleIy2zXbmuBBnJgFMFpTX6YfyKgk/9kuo2+GKnXwC3KasV4ZZKz5f36GGy/sNRFF2OmQq1Ztgnzd1qlQt0FAVR4UiaRq0YBKJ2ZR2fJQcbY6QK1IsuOZI3tJXgoPoeLH6mkVzNlIO0FovcohpcD7svsmzoSHYv0THLdtOlkAZbeFkJPQqBTgxYiCeZ1Mvg54BG7tfkZMdF/IXq9r1OM8/NW3eVnmJswNm2zVBvQw75oI3Yt67HmcEjCCmMm3vmRKDC4UnbyRBNrh6WKY9Wi0XFawCKNZrgmdY4Z6GUvfSKtEuYzHLX/i18/Xp/yjiuijxE1cd3ciZEa9BIokB58F0gTzFm8LBYDDec9ZfPyuYoMqLhPLRB+JYL8HfVTCWIVRxlPyoizUG5PhDW/nzXhIdgffCBts0Ae4fySrruEQQyXPFYXkauOXnfiuonI8aJ2xPd7FWikwWSSQcSE1OlmVqzpVzg5cpzkjqtfEhYbjinViYNIg1pLlZc0tYrSax3pAg71cR8unW6glj/qBrktUR1DC63knCGy/idqz22R4DEp+cycMZYgpk8axJ37SDJga+oJ7YWBFD71VQ9SGwwmiojn0lVtQAZoylL3t0KLXIF3WhNyv6DCBJIA931GZZ0aKDRE4TN6X6yWgzUgKvZLuGtaIBfDzssb6oqTFgcMPEGt4nw3zD/wGjPO/SMa7SmLKZPY+4ILtfJoqXZspK5SVIJ/T174aIAOXW5dajEWVVeVHOVNPakVeYcbO6AVUtdVRWlt5U3WamPyvyT93sUO0p3rDbsk5Qda+Nm1vzDuRvnors9EhaNgc70+pMC6C7C/9OxMhNHf9oMVl++y/g8EbWrprWFCwN4vGnKW0LmlUAaBtqVVsnh4mS2zIJ9qT6SNkaZ3SAxOTj9cgxj+eN0d/X7W0bLRNwD3QSAQThu5lpkWZ6uJVFqI2ji7E8opXlWxp0PQcWmyfkOOtXooJn8SLN0e6KA2VV45E1SdS0FGiF4pzL74KlI0uPe/RNRq6/6QG/RmsKrAYwjeNPMQHJsSh10ggtWzr8qe8vpGksIjF0+3HjCGCg0D5/mJvmTnuGP0wrfxz99gIYUkq1ZhzS2JTA2aqnMhRmZsVsvz+244O9JPAPGhXcXyUgx5ypLjSoF+j5i2bfMvNZrq0eiFDuh2haqurskfzD5AAjTa47wZkuaRP7RHpd1Zcg4f7drBkIOFS2+a07U/s4nFGpR4Glo++KtCPQckW1WK99rZGQlIGAYw85NF/NsvOpxpKnBQHHiTBCK79M+BXs74oYPgprB4eXqUiRTL/seZf8wK/I5CG8ZsyoOm+/NLxsQ2o5/PxqSIcgKtMgiOVhl/khpNVJa5GCGnSvimuP2PDCli5qmUaBFrlrRgJhsWwH9hlKzQewSXkv74xB9zX6aEhQIppmV+1eiZfSNQm50+J47U9BnNngYCfzfza30SgcbnnkPKx3S8RL2x8IAkx05+MpzNUy6h7reiSnV80rsMCdfpJcapnKx6b8RAOgxz5CR/Dk6nJEL2od5SnTUjS/w1loWlDKINC4lOvpBXS1fKdzJucNMX6SwBuaXB2gn3DmCTPVJCaZgLZPi5hUN0IoyEXIaHwOvA4CBCBJhSAkVSFK+DOSoqksBXX9d91ADnrlJJKSCH3deZDojLuozId1eDg/BODPyvnZb8gXufCXti/L9ryTqrMdyqDF+TKgfUcppNU2Atr7T3tBBBJTL+Q/W/nApUHQUZV4rbhgyXMglx1k6RyQwbACSxAXDHZWLJ+2l0kB77O7y93">
</div>


<script src="/WebResource.axd?d=x2nkrMJGXkMELz33nwnakOULBdUi8ZrehokNunhauO29fg_hDwzWrrydB-L3tqh2NxgwAQRTHG5XlZPipP5vHft4T8w1&amp;t=638459680569584809" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
//]]>
</script>

<div>

	<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="47897F27">
</div>

<div id="Q" class="container-entry container-question flex-container flex-extend">

	
	<div id="T" class="text flex-item fixed">
	
		<div class="clearfix">
			
			<div id="ctl00_ctl00_MC_QARow" class="mainlinks flex-container flex-extend">
				<div class="flex-item">
					<a id="ctl00_ctl00_MC_AskQ" class="button compose" href="/Questions/ask.aspx">Ask a Question</a>
				</div>
				<div class="navigation flex-item align-right">
					<a id="ctl00_ctl00_MC_Latest" href="/script/Answers/List.aspx?tab=active">All<span class="desktop-only"> Questions</span></a>
					<a id="ctl00_ctl00_MC_Unansw" href="/script/Answers/List.aspx?tab=unanswered"><span class="desktop-only">All </span>Unanswered</a> 
					
					<a id="ctl00_ctl00_MC_Help" class="faq" href="/KB/FAQs/QuickAnswersFAQ.aspx">FAQ</a>
				</div>
			</div>
		</div>

		<div id="contentdiv">
	
		<!-- Main Page Contents Start -->
		

<script type="text/javascript">
function ConfirmDelete() { return window.confirm("Are you sure you want to delete this item?"); }
</script>











<a name="_articleTop"></a>


<div class="float-right" style="width:150px">
	
</div>

<div itemprop="mainEntity" itemscope="" itemtype="http://schema.org/Question">

    <div class="question">

    
    <div class="header">
	    <a id="ctl00_ctl00_MC_AMC_TitleLink" class="header tight padded-top" href="/Questions/5381388/How-do-I-detect-spots-on-tablets"><h1 id="ctl00_ctl00_MC_AMC_ItemTitle" itemprop="name">How do I detect spots on tablets</h1></a>
    </div>

    <div id="CC" class="container-content">

	    
	    <div class="container-question clearfix extended">

		    <div class="rate-group">

			    
			    <div class="rate-item">
			        <div id="ctl00_ctl00_MC_AMC_RatingCtrl_RatingTable" class="small-text" data-objectref="2_5381388_1">

	<meta itemprop="upvoteCount" content="0">


	<div id="ctl00_ctl00_MC_AMC_RatingCtrl_RatingRow" class="flex-container rating-container medium-stars">

					
		

		
		<div class="nowrap tooltip">

			
			
			

			
			<div id="ctl00_ctl00_MC_AMC_RatingCtrl_RatingHistWrap" class="tooltip">

				
				<div id="ctl00_ctl00_MC_AMC_RatingCtrl_ResultWithHist" class="rating-result"><div class="flex-container rating-stars medium-stars"><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-fill-md.png" style="width:16px;height:16px"></div><div style="width:16px;position:relative" class="clipped"><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px;position:absolute;top:0px;right:0"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div></div></div>
				

				<div class="speech-bubble-container-up-right" style="width:170px">
					<div class="speech-bubble-up-right">
						<div class="histogram"></div>
					</div>
					<div class="speech-bubble-pointer-up-right">
						<div class="speech-bubble-pointer-up-right-inner"></div>
					</div>
				</div>
			</div>

			
            

			
            <span id="ctl00_ctl00_MC_AMC_RatingCtrl_RatingSignin" class="speech-bubble-container-down">
		        <div class="speech-bubble-down">
                    Please <a id="ctl00_ctl00_MC_AMC_RatingCtrl_SignUp" href="https://www.codeproject.com/script/Membership/LogOn.aspx?rp=%2fQuestions%2f5381388%2fHow-do-I-detect-spots-on-tablets">Sign up or sign in</a> 
                    to vote.
		        </div>
		        <div class="speech-bubble-pointer-down">
			        <div class="speech-bubble-pointer-down-inner"></div>
		        </div>
	        </span>    

		</div>
		
	
		
		<div id="ctl00_ctl00_MC_AMC_RatingCtrl_VoteCountNoHist" class="rating-votes nowrap">1.00/5  (1 vote)</div>	

		

		
		<div class="rating-undo" title="Undo vote" style="margin-left:5px;display:none"></div>

		
		
	</div>

	
	

</div>

			    </div>

			    

		    </div>

		    
		    <div style="height:16px;width:100%">
			    <span id="ctl00_ctl00_MC_AMC_TagList_TagWrp" class="medium-text tags horizontal">

	
	<span id="ctl00_ctl00_MC_AMC_TagList_TagLabel" class="bold">See more:</span>

	
	<span id="ctl00_ctl00_MC_AMC_TagList_VisibleTags"><div class="t"><a href="/script/Answers/List.aspx?tab=active&amp;tags=268" data-id="268">Python</a></div><div class="t"><a href="/script/Answers/List.aspx?tab=active&amp;tags=1874" data-id="1874">OpenCV</a></div></span> 

	
	
</span>


		    </div>

		    <div style="margin-top:25px" itemprop="text">
			    I have a frame which consist of many tablets. There are spots on the tablets. I want to detect those spots which are on tablet. The spots are of random color, random shape and random size. How can i detect these spots using image processing?<br>
<br>
<b>What I have tried:</b><br>
<br>
I have tried edge detection, histogram analysis method, blob detection method. I am not able to get accurate results.
		    </div>
	    </div>

    </div>

    <div class="qa-info row">


	    
	    <div class="col">
		    <strong>Posted</strong> <time itemprop="dateCreated" datetime="2024-04-25T20:59:00">25-Apr-24 20:59pm</time>
<div class="member-rep-container">  
	<a id="ctl00_ctl00_MC_AMC_QuestionAuthorRepInfo_MemberName" href="/script/Membership/View.aspx?mid=16251838"><span itemprop="author" itemscope="" itemtype="http://schema.org/Person"><span itemprop="name">01fe20bec297</span></span></a><span id="ctl00_ctl00_MC_AMC_QuestionAuthorRepInfo_TotalPoints" title="Total reputation points" class="member-rep-box"></span>
</div>

	    </div>

	    
	    

	    <div class="col align-right small-text commands">

		    
		    
	    </div>	
	
    </div>

    

    
    <div class="spaced padded-top">
	    <a id="ctl00_ctl00_MC_AMC_AddChild1" class="button large anchorLink" href="#NewEntryGroup" name="anchorTarget">Add a Solution</a>
    </div>

    
    <a id="ctl00_ctl00_MC_AMC_QuestionComments_ContainerPermalink" class="CommentAnchor" name="cmt2_5381388"></a>

<div id="ctl00_ctl00_MC_AMC_QuestionComments_CommentContainer" class="container-comments" objectref="2_5381388_1" pagenumber="0" pagesize="0" boldmemberid="16251838" currentmemberid="0" modifystatus="False">	 

	
	

	
	<div name="CP-CommentList" class="comment-list">
		
	</div> 

	 
	

	  

</div> 


    </div>
	<hr>

    

        
        <div class="answer-list-header row">
            <div class="col-4">
                <h2 id="ctl00_ctl00_MC_AMC_AnswerCount" class="text-nowrap tight"><span itemprop="answerCount">2 </span> solutions</h2>
            </div>
            <div class="col-8 align-right" style="margin-top: 1rem;">
				<div style="display:inline-block">
					<ul class="ui-tabs-nav ui-helper-reset ui-corner-all clearfix">
	<li id="ctl00_ctl00_MC_AMC_TabsCtrl_TabsRpt_ctl01_LI" class="ui-corner-top ui-tabs-selected">
		<a id="ctl00_ctl00_MC_AMC_TabsCtrl_TabsRpt_ctl01_TL" title="Best rated answers" class="ui-corner-top">
			<span>Top Rated</span>
		</a>
		
	</li>

	<li id="ctl00_ctl00_MC_AMC_TabsCtrl_TabsRpt_ctl02_LI" class="ui-corner-top ">
		<a id="ctl00_ctl00_MC_AMC_TabsCtrl_TabsRpt_ctl02_TL" title="Newest answers posted to this question" class="ui-corner-top" href="/Questions/5381388/How-do-I-detect-spots-on-tablets?tab=mostrecent">
			<span>Most Recent</span>
		</a>
		
	</li>
</ul>

				</div>
            </div>
        </div>

        
        <div class="qa-top-pager">
	        
        </div>

        <div class="ui-tabs-panel tight">
	        
		        <div id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_AnswerGroup" class="answer-row answer first" itemscope="" itemtype="http://schema.org/Answer" itemprop="suggestedAnswer">

<div id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_Header" class="header container">

	
	
	<div class="rate-group">
		<div class="rate-item">
			<div id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl_RatingTable" class="small-text" data-objectref="2_5381395_1">

	<meta itemprop="upvoteCount" content="0">


	<div id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl_RatingRow" class="flex-container rating-container medium-stars">

					
		

		
		<div class="nowrap tooltip">

			
			
			

			
			<div id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl_RatingHistWrap" class="tooltip">

				
				<div id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl_ResultWithHist" class="rating-result"><div class="flex-container rating-stars medium-stars"><div style="width:16px;position:relative" class="clipped"><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px;position:absolute;top:0px;right:0"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div></div></div>
				

				<div class="speech-bubble-container-up-right" style="width:170px">
					<div class="speech-bubble-up-right">
						<div class="histogram"></div>
					</div>
					<div class="speech-bubble-pointer-up-right">
						<div class="speech-bubble-pointer-up-right-inner"></div>
					</div>
				</div>
			</div>

			
            

			
            <span id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl_RatingSignin" class="speech-bubble-container-down">
		        <div class="speech-bubble-down">
                    Please <a id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl_SignUp" href="https://www.codeproject.com/script/Membership/LogOn.aspx?rp=%2fQuestions%2f5381388%2fHow-do-I-detect-spots-on-tablets">Sign up or sign in</a> 
                    to vote.
		        </div>
		        <div class="speech-bubble-pointer-down">
			        <div class="speech-bubble-pointer-down-inner"></div>
		        </div>
	        </span>    

		</div>
		
	
		
			

		

		
		<div class="rating-undo" title="Undo vote" style="margin-left:5px;display:none"></div>

		
		
	</div>

	
	

</div>

		</div>
	</div>
	

	
	<h2 id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_Title" class="float-left" style="margin:-10px 0 0 5px">Solution 1</h2><a id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_Heading" itemprop="url" name="answer1"></a>

	
	<div class="float-left" style="margin:3px 0 0 20px">
	<a id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_Accept" title="Mark this solution as an accepted solution." class="button safe" style="display:none;">Accept&nbsp;Solution</a>
	<a id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_Unaccept" title="Revoke accepted solution designation." class="button unsafe" style="display:none;">Reject&nbsp;Solution</a>
	</div>

	<p id="AcceptError" class="error" style="display:none"></p>
		
	
	
</div>


<div class="text" itemprop="text">
    I'm going to have to make assumptions that you have circular tablets with circular spots. Off the top of my head, you would use something like HoughCircles to detect all circles in the image; once you have the list of all circles, you would look for circles inside circles; these should be your spots. If there are any circles without a containing circle, this means that either the tablet is not a circle, or the circle is a tablet without a spot. Unfortunately, you're going to have to decide which of these is the case.<br>
<br>
Note that you could end up with situations with spots so very close together that they get missed because the minimum distance would be too small. This approach also assumes that you don't get spots inside spots inside the tablet.
</div>

<div></div>

<div class="qa-info clearfix">
	
	<div class="float-right commands">

		
		&nbsp;

		<div class="tooltip inline">
			<a id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_Permalink" rel="nofollow" itemprop="url" href="/Answers/5381395/How-do-I-detect-spots-on-tablets">Permalink</a>
			<div class="speech-bubble-container-up-right" style="width:450px">
				<div class="speech-bubble-up-right" style="text-align:center">
					Share this answer
					<input name="ctl00$ctl00$MC$AMC$Answers$ctl00$A$PermalinkText" type="text" id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_PermalinkText" style="width:95%" value="https://www.codeproject.com/Answers/5381395/How-do-I-detect-spots-on-tablets" onload="this.select()">
				</div>
				<div class="speech-bubble-pointer-up-right">
					<div class="speech-bubble-pointer-up-right-inner"></div>
				</div>
			</div>
		</div>

		&nbsp;
		 

		

    	
	
		<span id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_ReportItem_ReportWrapper" class="report-item-wrapper">

<span id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_ReportItem_ResultMsg" class="result tiny-text invisible"></span>





</span>

		
	</div>
	
	
	
	<div class="meta-data">
		<b>Posted</b> <time itemprop="dateCreated" datetime="2024-04-25T21:52:00">25-Apr-24 21:52pm</time>
<div class="member-rep-container">  
	<a id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_AuthorRepInfo_MemberName" href="/script/Membership/View.aspx?mid=213147"><span itemprop="author" itemscope="" itemtype="http://schema.org/Person"><span itemprop="name">Pete O'Hanlon</span></span></a><span id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_AuthorRepInfo_TotalPoints" title="Total reputation points" class="member-rep-box"></span>
</div>

	</div>
    

	
	

	
	

	
	
</div>

   

<div style="clear:both"></div>


<a id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_CommentCtrlObj_ContainerPermalink" class="CommentAnchor" name="cmt2_5381395"></a>
<div id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_CommentCtrlObj_ComHdr" class="comment-header">Comments</div>
<div id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_CommentCtrlObj_CommentContainer" class="container-comments" objectref="2_5381395_1" pagenumber="0" pagesize="0" boldmemberid="213147" currentmemberid="0" modifystatus="False">	 

	
	

	
	<div name="CP-CommentList" class="comment-list">
		



		<div id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_CommentCtrlObj_CommentsList_List_ctl00_CR_CommentItem" class="comment-item hover-row first" commentid="1126211" authorid="16251838" associatedobjectref="2_5381395_1">

	<div class="flex-container flex-extend">
		<div class="flex-item">
			<a href="/script/Membership/View.aspx?mid=16251838" id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_CommentCtrlObj_CommentsList_List_ctl00_CR_MemberLink" class="comment-author">01fe20bec297</a><span id="cmt-jump-1126211"></span>
			<span id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_CommentCtrlObj_CommentsList_List_ctl00_CR_DatePosted">26-Apr-24 5:16am</span> 
			
			&nbsp; &nbsp; 

			
			
		</div>

		<div class="comment-commands flex-item-tight">
			
			

			

			
		</div>	
	</div>

	<div id="ctl00_ctl00_MC_AMC_Answers_ctl00_A_CommentCtrlObj_CommentsList_List_ctl00_CR_CommentContent" class="comment-content">So most of the tablets are ovel and some are square as well as circle.</div>

	<div id="EditDialogPlaceholder"></div>
	<div id="ReplyDialogPlaceholder"></div>

</div>

	





	</div> 

	 
	

	  

</div> 


</div>





	        
		        <div id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_AnswerGroup" class="answer-row answer" itemscope="" itemtype="http://schema.org/Answer" itemprop="suggestedAnswer">

<div id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_Header" class="header container">

	
	
	<div class="rate-group">
		<div class="rate-item">
			<div id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl_RatingTable" class="small-text" data-objectref="2_5381546_1">

	<meta itemprop="upvoteCount" content="0">


	<div id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl_RatingRow" class="flex-container rating-container medium-stars">

					
		

		
		<div class="nowrap tooltip">

			
			
			

			
			<div id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl_RatingHistWrap" class="tooltip">

				
				<div id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl_ResultWithHist" class="rating-result"><div class="flex-container rating-stars medium-stars"><div style="width:16px;position:relative" class="clipped"><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px;position:absolute;top:0px;right:0"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div><div><img src="https://codeproject.global.ssl.fastly.net/script/Ratings/Images/star-empty-md.png" style="width:16px;height:16px"></div></div></div>
				

				<div class="speech-bubble-container-up-right" style="width:170px">
					<div class="speech-bubble-up-right">
						<div class="histogram"></div>
					</div>
					<div class="speech-bubble-pointer-up-right">
						<div class="speech-bubble-pointer-up-right-inner"></div>
					</div>
				</div>
			</div>

			
            

			
            <span id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl_RatingSignin" class="speech-bubble-container-down">
		        <div class="speech-bubble-down">
                    Please <a id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl_SignUp" href="https://www.codeproject.com/script/Membership/LogOn.aspx?rp=%2fQuestions%2f5381388%2fHow-do-I-detect-spots-on-tablets">Sign up or sign in</a> 
                    to vote.
		        </div>
		        <div class="speech-bubble-pointer-down">
			        <div class="speech-bubble-pointer-down-inner"></div>
		        </div>
	        </span>    

		</div>
		
	
		
			

		

		
		<div class="rating-undo" title="Undo vote" style="margin-left:5px;display:none"></div>

		
		
	</div>

	
	

</div>

		</div>
	</div>
	

	
	<h2 id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_Title" class="float-left" style="margin:-10px 0 0 5px">Solution 2</h2><a id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_Heading" itemprop="url" name="answer2"></a>

	
	<div class="float-left" style="margin:3px 0 0 20px">
	<a id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_Accept" title="Mark this solution as an accepted solution." class="button safe" style="display:none;">Accept&nbsp;Solution</a>
	<a id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_Unaccept" title="Revoke accepted solution designation." class="button unsafe" style="display:none;">Reject&nbsp;Solution</a>
	</div>

	<p id="AcceptError" class="error" style="display:none"></p>
		
	
	
</div>


<div class="text" itemprop="text">
    Looks like you should use Particle analysis/detection within each of those tablets. Firstly, to identify the tablets, you should again use particle analysis/detection.<br>
<br>
The open source software ImageJ has code for this - see <a href="https://imagej.net/imaging/particle-analysis#:~:text=To%20analyze%20the%20particles%20in,of%20interest%20in%20the%20image.">Particle Analysis</a>[<a href="https://imagej.net/imaging/particle-analysis#:~:text=To%20analyze%20the%20particles%20in,of%20interest%20in%20the%20image." target="_blank" title="New Window">^</a>]<br>
<br>
You can find source code for ImageJ (is in Java) at their site, or on Github. You'll need to examine the code which does this, and port it to the language you need.
</div>

<div></div>

<div class="qa-info clearfix">
	
	<div class="float-right commands">

		
		&nbsp;

		<div class="tooltip inline">
			<a id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_Permalink" rel="nofollow" itemprop="url" href="/Answers/5381546/How-do-I-detect-spots-on-tablets">Permalink</a>
			<div class="speech-bubble-container-up-right" style="width:450px">
				<div class="speech-bubble-up-right" style="text-align:center">
					Share this answer
					<input name="ctl00$ctl00$MC$AMC$Answers$ctl01$A$PermalinkText" type="text" id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_PermalinkText" style="width:95%" value="https://www.codeproject.com/Answers/5381546/How-do-I-detect-spots-on-tablets" onload="this.select()">
				</div>
				<div class="speech-bubble-pointer-up-right">
					<div class="speech-bubble-pointer-up-right-inner"></div>
				</div>
			</div>
		</div>

		&nbsp;
		 

		

    	
	
		<span id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_ReportItem_ReportWrapper" class="report-item-wrapper">

<span id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_ReportItem_ResultMsg" class="result tiny-text invisible"></span>





</span>

		
	</div>
	
	
	
	<div class="meta-data">
		<b>Posted</b> <time itemprop="dateCreated" datetime="2024-04-29T00:29:00">29-Apr-24 0:29am</time>
<div class="member-rep-container">  
	<a id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_AuthorRepInfo_MemberName" href="/script/Membership/View.aspx?mid=1473098"><span itemprop="author" itemscope="" itemtype="http://schema.org/Person"><span itemprop="name">Amarnath S</span></span></a><span id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_AuthorRepInfo_TotalPoints" title="Total reputation points" class="member-rep-box"></span>
</div>

	</div>
    

	
	

	
	

	
	
</div>

   

<div style="clear:both"></div>


<a id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_CommentCtrlObj_ContainerPermalink" class="CommentAnchor" name="cmt2_5381546"></a>

<div id="ctl00_ctl00_MC_AMC_Answers_ctl01_A_CommentCtrlObj_CommentContainer" class="container-comments" objectref="2_5381546_1" pagenumber="0" pagesize="0" boldmemberid="1473098" currentmemberid="0" modifystatus="False">	 

	
	

	
	<div name="CP-CommentList" class="comment-list">
		
	</div> 

	 
	

	  

</div> 


</div>





	        
        </div>

        
        

        
        <div class="padded-top">
        <a id="ctl00_ctl00_MC_AMC_AddChild2" class="button large" href="/Questions/5381388/answer" style="display: none;">Add a Solution</a>
        </div>

    

    
    <div id="NewEntryGroup" class="container" style="">
	    

<div id="PostEntryContainer" class="qa-post">


<h2 id="ctl00_ctl00_MC_AMC_PostEntryObj_NewEntryHeading" class="contrast1-color">Add your solution here</h2>


<input name="ctl00$ctl00$MC$AMC$PostEntryObj$CustomValidationHook" type="text" id="ctl00_ctl00_MC_AMC_PostEntryObj_CustomValidationHook" style="display:none">







<div id="ctl00_ctl00_MC_AMC_PostEntryObj_ValidationSummary1" class="error callout" style="color:Red;display:none;">

</div>



<div class="container-post new-message pe-3">

	<div class="inline">

		
		

		<a name="PostContent"></a>

		
		

		
		<div class="clearfix">
            

<div id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_FormatBar" class="desktop-block-only tablet-block-only"><button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('b');return false;" title="Wrap the Selected Text in HTML bold Tags"><b>&nbsp;B&nbsp;</b></button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('i');return false;" title="Wrap the Selected Text in HTML Italic Tags"><i>&nbsp;I&nbsp;</i></button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('u');return false;" title="Wrap the Selected Text in HTML Underline Tags">&nbsp;<u>U</u>&nbsp;</button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('strike');return false;" title="Wrap the Selected Text in HTML strike through Tags"><strike>&nbsp;S&nbsp;</strike></button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('small');return false;" title="Wrap the Selected Text in HTML small Tags"><small>small</small></button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('big');return false;" title="Wrap the Selected Text in HTML big Tags">BIG</button>
<span class="tooltip"><button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre', null, false);return false;" title="Wrap the Selected Text in 'pre' Tags: For separate source code blocks"><tt style="background-color: #FBEDBB;">code</tt></button>
<div class="tooltip-flyout small-text" style="width:auto !important"><div class="flex-container"><div class="flex-item"><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;text&quot;')">Plain Text</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;ASM&quot;')">ASM</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;ASP&quot;')">ASP</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;ASP.NET&quot;')">ASP.NET</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;BASIC&quot;')">BASIC</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;BAT&quot;')">BAT</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;C#&quot;')">C#</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;C++&quot;')">C++</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;COBOL&quot;')">COBOL</div></div><div class="flex-item"><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;CoffeeScript&quot;')">CoffeeScript</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;CSS&quot;')">CSS</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Dart&quot;')">Dart</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;dbase&quot;')">dbase</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;F#&quot;')">F#</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;FORTRAN&quot;')">FORTRAN</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;HTML&quot;')">HTML</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Java&quot;')">Java</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Javascript&quot;')">Javascript</div></div><div class="flex-item"><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Kotlin&quot;')">Kotlin</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Lua&quot;')">Lua</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;MIDL&quot;')">MIDL</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;MSIL&quot;')">MSIL</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;ObjectiveC&quot;')">ObjectiveC</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Pascal&quot;')">Pascal</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;PERL&quot;')">PERL</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;PHP&quot;')">PHP</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;PowerShell&quot;')">PowerShell</div></div><div class="flex-item"><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Python&quot;')">Python</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Razor&quot;')">Razor</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Ruby&quot;')">Ruby</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Scala&quot;')">Scala</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Shell&quot;')">Shell</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;SLN&quot;')">SLN</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;SQL&quot;')">SQL</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Swift&quot;')">Swift</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;T4&quot;')">T4</div></div><div class="flex-item"><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;Terminal&quot;')">Terminal</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;TypeScript&quot;')">TypeScript</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;VB&quot;')">VB</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;VBScript&quot;')">VBScript</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;XML&quot;')">XML</div><div class="list-item nowrap" style="cursor:pointer" onclick="return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('pre','lang=&quot;YAML&quot;')">YAML</div></div></div></div></span><button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.toggleWrapSelection('code', null, false);return false;" title="Wrap the Selected Text in 'code' Tags: For code within sentences"><code>var</code></button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.insertText('&amp;l' + 't;');return false;" title="Insert HTML Extended Character Code For <">&nbsp;&lt;&nbsp;</button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.insertText('&amp;g' + 't;');return false;" title="Insert HTML Extended Character Code For >">&nbsp;&gt;&nbsp;</button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.insertText('&amp;a' + 'mp;');return false;" title="Insert HTML Extended Character Code For &amp;">&nbsp;&amp;&nbsp;</button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.inLinkErAte(null, false);return false;" title="Convert URL to a hyperlink">link</button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.inLinkErAte(null, true);return false;" title="Convert URL to a hyperlink with optional 'New Window' link">[^]</button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.encoderate();return false;" title="HTML encode text">encode</button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.untab();return false;" title="Replace tabs with spaces">untab</button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.fixCase();return false;" title="Fix the casing of a sentence">case</button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.adjustLeading(4);return false;" title="indent">indent</button>
<button class="toolbar" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.adjustLeading(-4);return false;" title="outdent">outdent</button>
</div>

<div id="EditWrap">
	<table id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_EditContainer" cellpadding="0" cellspacing="0" class="container-editor">
	<tbody><tr valign="top">
		<td style="width:100%">
		<div class="resizable-control"><span><textarea name="ctl00$ctl00$MC$AMC$PostEntryObj$Content$MessageText" id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_MessageText" class="resizable text-editor processed" style="width:100%;height:250px;"></textarea><div class="grippie" style="margin-right: -11px;"> </div></span></div>
		
        
	</td>
	</tr>
</tbody></table>

</div>

<div id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_pasteDialog" class="paste-dialog invisible">

	<div class="header"><a href="#" class="close-notify">OK</a>Paste as</div>

    <div class="padded">
	<table id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting" class="small-text paste-options extended" border="0">
	<tbody><tr>
		<td><span title="HTML markup will be removed from text" onmouseover="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;text&quot;);" onmouseout="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.getPasteSetting());"><input id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_0" type="radio" name="ctl00$ctl00$MC$AMC$PostEntryObj$Content$OnPasteSetting" value="text" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;text&quot;);" tabindex="8"><label for="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_0">Strip HTML</label></span></td>
	</tr><tr>
		<td><span title="Pasted text will automatically be HTML-encoded" onmouseover="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;encoded&quot;);" onmouseout="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.getPasteSetting());"><input id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_1" type="radio" name="ctl00$ctl00$MC$AMC$PostEntryObj$Content$OnPasteSetting" value="encoded" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;encoded&quot;);" tabindex="8"><label for="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_1">Encode HTML</label></span></td>
	</tr><tr>
		<td><span title="Clipboard will be pasted as-is, preserving HTML tags and entities." onmouseover="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;html&quot;);" onmouseout="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.getPasteSetting());"><input id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_2" type="radio" name="ctl00$ctl00$MC$AMC$PostEntryObj$Content$OnPasteSetting" value="html" checked="checked" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;html&quot;);" tabindex="8"><label for="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_2">Paste as-is</label></span></td>
	</tr><tr>
		<td><span title="Clipboard text will be wrapped in PRE tags, and content HTML encoded, always" onmouseover="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;code&quot;);" onmouseout="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.getPasteSetting());"><input id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_3" type="radio" name="ctl00$ctl00$MC$AMC$PostEntryObj$Content$OnPasteSetting" value="code" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;code&quot;);" tabindex="8"><label for="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_3">Code block</label></span></td>
	</tr><tr>
		<td><span title="Clipboard text will be pasted within a quote block" onmouseover="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;quote&quot;);" onmouseout="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.getPasteSetting());"><input id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_4" type="radio" name="ctl00$ctl00$MC$AMC$PostEntryObj$Content$OnPasteSetting" value="quote" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;quote&quot;);" tabindex="8"><label for="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_4">Quoted Text</label></span></td>
	</tr><tr>
		<td><span title="Sniff pasted text to see if it contains code, and wrap in PRE blocks if it does" onmouseover="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;auto&quot;);" onmouseout="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.getPasteSetting());"><input id="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_5" type="radio" name="ctl00$ctl00$MC$AMC$PostEntryObj$Content$OnPasteSetting" value="auto" onclick="editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.previewPaste(&quot;auto&quot;);" tabindex="8"><label for="ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting_5">Best guess</label></span></td>
	</tr>
</tbody></table>
	</div>

	<div id="expando" class="invisible">
		<div class="header">To display as</div>
		<table width="100%" cellpadding="0" cellspacing="0">
		<tbody><tr><td class="MsgBd BdSel"><div id="pasteHtmlPreview" class="paste-preview"></div></td></tr>
		</tbody></table>
	</div>

</div><span id="ctl00_ctl00_MC_AMC_PostEntryObj_ContentVal" style="color:Red;display:none;">The content must be between 30 and 50000 characters.</span>
		</div>

		

        

		<div class="small-text padded-top">
			<span class="small-text invisible"><input id="ctl00_ctl00_MC_AMC_PostEntryObj_IgnoreHtml" type="checkbox" name="ctl00$ctl00$MC$AMC$PostEntryObj$IgnoreHtml" tabindex="6"><label for="ctl00_ctl00_MC_AMC_PostEntryObj_IgnoreHtml">Treat my content as plain text, not as HTML</label></span>
		</div>

		
		<h2>Preview <span id="refresh-count" style="display:none">0</span></h2>
		<div id="Preview" class="preview">…</div>

		
		

		
		<br>
		<p id="AjaxLogonErrors" class="error callout" style="display:none"></p>
		

<div id="LogOnContainer">

	<table class="member-signin" cellspacing="0">
	
	<tbody><tr>
		<td id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_ExistHead" colspan="2"><h3>Existing Members</h3>
			<div style="margin:-20px 0 10px" class="subdue">Sign in to your account</div>
		</td>
<td id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_QuickSignHead" colspan="2"><h3 id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_QuickTitle">...or Join us</h3>
			<div style="margin:-20px 0 10px" class="subdue">Download, Vote, Comment, Publish.</div>
		</td>

	</tr>

	<tr valign="top">

		
		<td>

			<table>
			<tbody><tr>
				<td class="align-middle align-right nowrap">Your Email &nbsp;</td>
				<td><input name="ctl00$ctl00$MC$AMC$PostEntryObj$MemberLogOn$CurrentEmail" id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_CurrentEmail" class="small-text" type="email" autocomplete="email" style="width:175px;"></td>
			</tr>
			<tr>
				<td class="align-middle align-right nowrap">Password &nbsp;</td>
				<td><input name="ctl00$ctl00$MC$AMC$PostEntryObj$MemberLogOn$CurrentPassword" type="password" id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_CurrentPassword" class="small-text" autocomplete="current-password" style="width:175px;"></td>
			</tr>
			<tr>
				<td colspan="2" class="align-middle align-right nowrap">
					
					<div><a id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_SendPassword" class="forgot small-text" href="https://www.codeproject.com/script/Membership/SendPassword.aspx?rp=/">Forgot your password?</a></div>
				</td>
			</tr>
			</tbody></table>

		</td>
		<td width="70px">&nbsp;</td>

		<td>

			<table>
			<tbody><tr>
				<td class="align-middle align-right nowrap">Your Email &nbsp;</td>
				<td class="align-right">
					<input name="ctl00$ctl00$MC$AMC$PostEntryObj$MemberLogOn$QuickEmail" id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_QuickEmail" class="small-text" type="email" autocomplete="off" style="width:175px;">
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<div id="NewEmailError" class="locked invisible small-text" style="margin-top: -10px; display: none;">This
					email is in use. Do you need your <a id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_Password2" href="https://www.codeproject.com/script/Membership/SendPassword.aspx?rp=/">password</a>?</div>
					
				</td>
			</tr>
			<tr>
				<td colspan="2" class="align-middle align-right nowrap subdue">
					Optional Password &nbsp;
					<input name="ctl00$ctl00$MC$AMC$PostEntryObj$MemberLogOn$QuickPassword" type="password" id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_QuickPassword" class="small-text" autocomplete="new-password" style="width:125px;">
					<div id="password-strength-quick" style="margin-top: -10px; padding-bottom: 10px;"><span class="passStrengthify" style="display: inline-block; visibility: hidden;"><div><span style="font-size: smaller;">Strength<span style="margin-left: 1em; color: gray;">Too short</span></span></div><span style="height: 3px; width: 15px; margin-right: 3px; max-height: 3px; font-size: 1px; float: left; padding-right: 0px; background-color: gray;"></span><span style="height: 3px; width: 15px; margin-right: 3px; max-height: 3px; font-size: 1px; float: left; padding-right: 0px; background-color: gray;"></span><span style="height: 3px; width: 15px; margin-right: 3px; max-height: 3px; font-size: 1px; float: left; padding-right: 0px; background-color: gray;"></span><span style="height: 3px; width: 15px; margin-right: 3px; max-height: 3px; font-size: 1px; float: left; padding-right: 0px; background-color: gray;"></span><span style="height: 3px; width: 15px; margin-right: 3px; max-height: 3px; font-size: 1px; float: left; padding-right: 0px; background-color: gray;"></span><span style="height: 3px; width: 15px; margin-right: 3px; max-height: 3px; font-size: 1px; float: left; padding-right: 0px; background-color: gray;"></span><span style="height: 3px; width: 15px; margin-right: 3px; max-height: 3px; font-size: 1px; float: left; padding-right: 0px; background-color: gray;"></span></span></div>
				</td>
			</tr>
			<tr>
				<td colspan="2" class="align-right small-text">
					
				</td>
			</tr>
			</tbody></table>

		</td>
		<td width="70px">&nbsp;</td>

		
	</tr>

	

	</tbody></table>

	<div id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_Choices" style="margin-top:20px;width:275px;margin-left:335px;" class="small-text subdue">
		<input id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_TermsOfUse" type="checkbox" name="ctl00$ctl00$MC$AMC$PostEntryObj$MemberLogOn$TermsOfUse" checked="checked"><label for="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_TermsOfUse">I have read and agree to the <a target="_blank" href="/info/TermsOfUse.aspx">Terms of Service</a> and <a target="_blank" href="/info/privacy.aspx">Privacy Policy</a></label><br>
		<span onchange="logonCtrlObject.OnNewslettersCheckChange(this);"><input id="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_AllNewsletters" type="checkbox" name="ctl00$ctl00$MC$AMC$PostEntryObj$MemberLogOn$AllNewsletters" checked="checked"><label for="ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_AllNewsletters">Please subscribe me to the CodeProject newsletters</label></span>
	</div>

</div>

<script type="text/javascript">
    function LogonCtrlObject()
    {
        var clickedOptin = false;

        this.OnCountryChange = function (CASL, subscribing) {
        }

        this.OnNewslettersCheckChange = function (checkbox) {
            clickedOptin = true;
        }

        this.OnCountrySelectionChange = function (dropdown) {
            var CASLCountries = [ "Canada",];
            if (dropdown.selectedIndex >= 0) {
                var country = dropdown[dropdown.selectedIndex].text;

                var useCASL = false;
                for (i = 0; i < CASLCountries.length; i++) {
                    if (CASLCountries[i] == country) {
                        useCASL = true;
                        break;
                    }
                }

                if (!clickedOptin)
                    $('#ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_AllNewsletters').prop('checked', !useCASL);

                logonCtrlObject.OnCountryChange(useCASL, $('#ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_AllNewsletters').prop('checked'));
            }
        }
    }

    var logonCtrlObject = new LogonCtrlObject();
</script>


		
		<div class="clearfix padded-top">
		
		<div id="AjaxSubmitGroup" style="">
			<a href="javascript:void(0)" id="ctl00_ctl00_MC_AMC_PostEntryObj_AjaxSubmit" class="button-large safe" onclick="OnAjaxSubmit(); return false;">Submit your solution</a>
		</div>
		</div>

		
		<p id="AjaxSubmitErrors" class="error callout" style="display:none"></p>

        
        <div id="PostEntryMessage" class="padded-top"></div>

		
		<div class="callout">
	    	When answering a question please:<br>
		    <ol class="spaced">
			<li>Read the question carefully.</li>
			<li>Understand that English isn't everyone's first language so be lenient of bad
			spelling and grammar.</li>
			<li>If a question is poorly phrased then either ask for clarification, ignore it, or
			<b>edit the question</b> and fix the problem. Insults are not welcome.</li>
            <li>Don't tell someone to read the manual. Chances are they have and don't get it.
                Provide an answer or move on to the next question.
		    </li></ol>
		    Let's work to help developers, not make them feel stupid.
		</div>
		

	</div>

    
	

	
    <div class="clearfix"></div>

	
</div>


</div>
<br style="clear:both">
    </div>

    
    <div id="ctl00_ctl00_MC_AMC_LicenseTerms" class="small-text" style="margin-top:20px;"><p class="small-text">This content, along with any associated source code and files, is licensed under <a href="http://www.codeproject.com/info/cpol10.aspx" rel="license">The Code Project Open License (CPOL)</a></p></div>
</div> 




		<!-- Main Page Contents End -->

		</div>

	</div>
	

	
	<div id="ctl00_ctl00_MC_NavRight" class="text-sidebar question flex-item">

		

<div class="align-right">
    <div style="display:inline-block;position:relative;top:-5px">
        
    </div>
    &nbsp;
    <a id="ctl00_ctl00_MC_Tools_PrintLnk" data-enabletooltip="true" data-tooltip="Print" data-width="auto" rel="nofollow" href="/Questions/5381388/How-do-I-detect-spots-on-tablets?display=Print" class="tooltip" title=""><img src="/App_Themes/CodeProject/Img/print48.png" style="width:24px;height:24px;border:0pt none;" alt="Print"><div class="speech-bubble-container-up" style="width:auto">  <div class="speech-bubble-up" style="text-align:center"> Print</div>  <div class="speech-bubble-pointer-up">    <div class="speech-bubble-pointer-up-inner"></div>  </div></div></a>

     

    <a id="ctl00_ctl00_MC_Tools_AnswersRSS" data-enabletooltip="true" data-tooltip="Quick Answers RSS feed" href="/webservices/QuestionRSS.aspx" class="tooltip" title="">
        <img src="/App_Themes/CodeProject/Img/rss48.png" alt="Answers RSS" style="width:24px;height:24px;border:0pt none;">
        <div class="speech-bubble-container-up" style="width:200px">  <div class="speech-bubble-up" style="text-align:center"> Quick Answers RSS feed</div>  <div class="speech-bubble-pointer-up">    <div class="speech-bubble-pointer-up-inner"></div>  </div></div></a>

    

</div>

		

		<div class="padded-top" style="height:250px;width:300px">
			
			<div class="msg-300x250" data-format="300x250" data-type="ad" data-publisher="lqm.codeproject.site" data-zone="ros" data-country="US" data-loadonview="true" data-tags="Python, OpenCV"><noscript><a href="https://pubads.g.doubleclick.net/gampad/jump?iu=/6839/lqm.codeproject.site/ros&sz=300x250&c=274888"><img src="https://pubads.g.doubleclick.net/gampad/jump?iu=/6839/lqm.codeproject.site/ros&sz=300x250&c=274888"  width="300px" height="250px" target="_blank"/></a></noscript><div id="div-gpt-ad-lqm.codeproject.site/ros-2" style="height: 250px; width: 300px; box-sizing: border-box; border: 0px; font-size: 0px;"></div></div>
		</div>

		<div class="sticky">
			

			

			

			<table class="experts-list padded-top">
				<tbody><tr><td colspan="2" class="header">Top Experts</td></tr>
				<tr class="subheader"><td width="50%">Last 24hrs</td><td width="50%">This month</td></tr>
				<tr>
					<td>

<div class="">



<table class="experts-list">
<tbody><tr>

<td class="name"><a id="MemberName" href="/script/Membership/View.aspx?mid=34187">Richard Deeming</a></td>
<td align="right" class="points"><span title="Points earned in period">100</span></td>
</tr>

<tr>

<td class="name"><a id="MemberName" href="/script/Membership/View.aspx?mid=213147">Pete O'Hanlon</a></td>
<td align="right" class="points"><span title="Points earned in period">75</span></td>
</tr>

<tr>

<td class="name"><a id="MemberName" href="/script/Membership/View.aspx?mid=1778670">CPallini</a></td>
<td align="right" class="points"><span title="Points earned in period">40</span></td>
</tr>

<tr>

<td class="name"><a id="MemberName" href="/script/Membership/View.aspx?mid=6122202">OriginalGriff</a></td>
<td align="right" class="points"><span title="Points earned in period">40</span></td>
</tr>

<tr>

<td class="name"><a id="MemberName" href="/script/Membership/View.aspx?mid=15847795">Red Kipling</a></td>
<td align="right" class="points"><span title="Points earned in period">34</span></td>
</tr>
</tbody></table>
</div></td>
					<td>

<div class="">



<table class="experts-list">
<tbody><tr>

<td class="name"><a id="MemberName" href="/script/Membership/View.aspx?mid=213147">Pete O'Hanlon</a></td>
<td align="right" class="points"><span title="Points earned in period">1,715</span></td>
</tr>

<tr>

<td class="name"><a id="MemberName" href="/script/Membership/View.aspx?mid=6122202">OriginalGriff</a></td>
<td align="right" class="points"><span title="Points earned in period">1,307</span></td>
</tr>

<tr>

<td class="name"><a id="MemberName" href="/script/Membership/View.aspx?mid=34187">Richard Deeming</a></td>
<td align="right" class="points"><span title="Points earned in period">545</span></td>
</tr>

<tr>

<td class="name"><a id="MemberName" href="/script/Membership/View.aspx?mid=283762">Dave Kreskowiak</a></td>
<td align="right" class="points"><span title="Points earned in period">415</span></td>
</tr>

<tr>

<td class="name"><a id="MemberName" href="/script/Membership/View.aspx?mid=767687">Richard MacCutchan</a></td>
<td align="right" class="points"><span title="Points earned in period">355</span></td>
</tr>
</tbody></table>
</div></td>
				</tr>
			</tbody></table>

			

			
		
			<div style="margin:auto;width:160px;margin-top:10px;border: 1px solid #eee">
				<div class="msg-160x600" data-format="160x600" data-type="ad" data-publisher="lqm.codeproject.site" data-zone="ros" data-country="US" data-tags="Python, OpenCV"><noscript><a href="https://pubads.g.doubleclick.net/gampad/jump?iu=/6839/lqm.codeproject.site/ros&sz=160x600&c=274888"><img src="https://pubads.g.doubleclick.net/gampad/jump?iu=/6839/lqm.codeproject.site/ros&sz=160x600&c=274888"  width="160px" height="600px" target="_blank"/></a></noscript><div id="div-gpt-ad-lqm.codeproject.site/ros-3" style="height: 600px; width: 160px; box-sizing: border-box; border: 0px; font-size: 0px;"></div></div>
			</div>

			

			<div class="padded-top related">
				
	<div id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl00_header" class="header">Related Questions</div>
	<div class="content-list">	
	
	<div class="content-list-item">
		<a id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl02_Link" href="//www.codeproject.com/Questions/753713/How-Do-I-Detect-Mobile-and-Tablet-device">How Do I Detect Mobile and Tablet  device</a>
		
	</div>
	
	<div class="content-list-item">
		<a id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl03_Link" href="//www.codeproject.com/Questions/297737/Detection-of-Android-Mobile-and-Tablet">Detection of Android Mobile and Tablet</a>
		
	</div>
	
	<div class="content-list-item">
		<a id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl04_Link" href="//www.codeproject.com/Questions/5382597/How-I-can-integrate-EID-reader-with-tablet">How I can integrate EID reader with tablet</a>
		
	</div>
	
	<div class="content-list-item">
		<a id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl05_Link" href="//www.codeproject.com/Questions/856198/How-to-know-a-tablet-has-connected-to-the-computer">How to know a tablet has connected to the computer?</a>
		
	</div>
	
	<div class="content-list-item">
		<a id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl06_Link" href="//www.codeproject.com/Questions/5382662/How-to-do-object-detection-in-Csharp-using-yolov5">How to do object detection in C# using yolov5?</a>
		
	</div>
	
	<div class="content-list-item">
		<a id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl07_Link" href="//www.codeproject.com/Questions/5370665/How-do-I-fix-this-line-of-code-of-smile-detection">How do I fix this line of code of smile detection project</a>
		
	</div>
	
	<div class="content-list-item">
		<a id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl08_Link" href="//www.codeproject.com/Questions/601026/Detectingpluscustompluslaptopplus-2fplustabletplus">Detecting custom laptop / tablet pc key presses</a>
		
	</div>
	
	<div class="content-list-item">
		<a id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl09_Link" href="//www.codeproject.com/Questions/5367725/Unique-face-detection-and-saving">Unique face detection and saving</a>
		
	</div>
	
	<div class="content-list-item">
		<a id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl10_Link" href="//www.codeproject.com/Questions/111646/C-Tablet-checkboxes">C# Tablet checkboxes</a>
		
	</div>
	
	<div class="content-list-item">
		<a id="ctl00_ctl00_MC_RelatedEntries_RelatedResults_ctl11_Link" href="//www.codeproject.com/Questions/798167/Tablet-stuck-in-sideload">Tablet stuck in sideload</a>
		
	</div>
	
	</div>
	

			</div>

		</div>

	</div>
	

</div>


<script type="text/javascript">
//<![CDATA[
var Page_ValidationSummaries =  new Array(document.getElementById("ctl00_ctl00_MC_AMC_PostEntryObj_ValidationSummary1"));
var Page_Validators =  new Array(document.getElementById("ctl00_ctl00_MC_AMC_PostEntryObj_ContentVal"));
//]]>
</script>

<script type="text/javascript">
//<![CDATA[
var ctl00_ctl00_MC_AMC_PostEntryObj_ValidationSummary1 = document.all ? document.all["ctl00_ctl00_MC_AMC_PostEntryObj_ValidationSummary1"] : document.getElementById("ctl00_ctl00_MC_AMC_PostEntryObj_ValidationSummary1");
ctl00_ctl00_MC_AMC_PostEntryObj_ValidationSummary1.validationGroup = "ItemDetails";
var ctl00_ctl00_MC_AMC_PostEntryObj_ContentVal = document.all ? document.all["ctl00_ctl00_MC_AMC_PostEntryObj_ContentVal"] : document.getElementById("ctl00_ctl00_MC_AMC_PostEntryObj_ContentVal");
ctl00_ctl00_MC_AMC_PostEntryObj_ContentVal.errormessage = "The content must be between 30 and 50000 characters.";
ctl00_ctl00_MC_AMC_PostEntryObj_ContentVal.display = "Dynamic";
ctl00_ctl00_MC_AMC_PostEntryObj_ContentVal.validationGroup = "ItemDetails";
ctl00_ctl00_MC_AMC_PostEntryObj_ContentVal.evaluationfunction = "CustomValidatorEvaluateIsValid";
//]]>
</script>


<script type="text/javascript">
//<![CDATA[

var Page_ValidationActive = false;
if (typeof(ValidatorOnLoad) == "function") {
    ValidatorOnLoad();
}

function ValidatorOnSubmit() {
    if (Page_ValidationActive) {
        return ValidatorCommonOnSubmit();
    }
    else {
        return true;
    }
}
        //]]>
</script>
</form>




						
						

						<br clear="all">
					</div>

					
					

				</div>

				<div class="theme1-background padded-top padded-bottom bottom-promo">
					<div class="msg-728x90" data-format="728x90" data-type="ad" data-publisher="lqm.codeproject.site" data-zone="ros" data-country="US" data-loadonview="true" data-tags="Python, OpenCV,pos_bottom"><noscript><a href="https://pubads.g.doubleclick.net/gampad/jump?iu=/6839/lqm.codeproject.site/ros&sz=728x90&c=274888"><img src="https://pubads.g.doubleclick.net/gampad/jump?iu=/6839/lqm.codeproject.site/ros&sz=728x90&c=274888"  width="728px" height="90px" target="_blank"/></a></noscript></div>
				</div>

				<div class="site-footer">
					<div class="align-left">
						<a id="ctl00_ctl00_AdvertiseLink" href="http://developermedia.com/">Advertise </a><br>
						<a id="ctl00_ctl00_PrivacyLink" href="/info/privacy.aspx">Privacy</a><br>
   						<a id="ctl00_ctl00_CookiePolicyLink" href="/info/cookie.aspx">Cookies</a><br>
						<a id="ctl00_ctl00_TermsOfUseLink" href="/info/TermsOfUse.aspx">Terms of Use</a><br>
						Last Updated 29 Apr 2024
					</div>

					<div class="align-center">
						


<div class="page-width">
    Layout: <a id="ctl00_ctl00_PageWidth_FixedT" title="Fixed width layout" rel="nofollow" class=" active" href="/Questions/5381388/How-do-I-detect-spots-on-tablets?PageFlow=FixedWidth">fixed</a>
    |
    <a id="ctl00_ctl00_PageWidth_FluidT" title="Fluid layout" rel="nofollow" href="/Questions/5381388/How-do-I-detect-spots-on-tablets?PageFlow=Fluid">fluid</a>
</div>


						
					</div>

					<div class="align-right">
						Copyright © <a href="mailto:webmaster@codeproject.com">CodeProject</a>, 1999-2024 <br>
						All Rights Reserved.<br>
						<br>
						Web01
						2.8:2024-05-23:1<br>
					</div>
				</div>

				<br clear="all">

				

			</div>
			

		</div>
		

	</div>
	

	<div id="ctl00_ctl00_Address" class="tiny-text subdue align-center padded-top">
	CodeProject,
	20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8
	+1 (416) 849-8900
	</div>

</div>
<div id="page-bottom"></div>



<script type="text/javascript"> // IMMEDIATE script

var editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content;

var editor_ctl00_ctl00_MC_AMC_PostEntryObj_WhatHaveYouTried;

function UpdateSize(elmName, indicator) {
 var elm = document.getElementById(elmName);
 if (elm) {
  var indElm = document.getElementById(indicator);
  if (indElm) indElm.value = elm.value.length.toString();
 }
}

function OnEdit() { 
    $('#Preview').html('');
    $('#AjaxSubmitErrors').hide();
    $('#AjaxLogonErrors').hide();
}
var validationData = {};
validationData.postErrorDivId   = 'AjaxSubmitErrors';
validationData.logonErrorDivId  = 'AjaxLogonErrors';
validationData.generalErrorMsg  = 'An error occurred and we were unable to complete your request. The error has been logged and an administrator notified. Sorry :(';
validationData.minContentLength = 30;
validationData.maxContentLength = 50000;
validationData.badLengthMsg     = 'Please provide more content.';

var newEntryData = {};
newEntryData.postUrl          = '/script/Answers/WebServices/ProcessNewEntry.aspx';
newEntryData.typeName         = 'answer';
newEntryData.parentId         = 5381388;
newEntryData.parentTypeName   = 'answer';
newEntryData.containerId      = 'PostEntryContainer';
newEntryData.messageId        = 'PostEntryMessage';
newEntryData.contentId        = 'ctl00_ctl00_MC_AMC_PostEntryObj_Content_MessageText';
newEntryData.whatHaveYouTriedId = 'ctl00_ctl00_MC_AMC_PostEntryObj_WhatHaveYouTried_MessageText';
newEntryData.submitBtnId      = 'AjaxSubmit';
newEntryData.helpTipsId       = 'ctl00_ctl00_MC_AMC_PostEntryObj_HelpTips';
newEntryData.useWysiwygEditor = false;
newEntryData.ignoreHtmlId     = 'ctl00_ctl00_MC_AMC_PostEntryObj_IgnoreHtml';
newEntryData.onPasteMode      = 'html';
newEntryData.getEditorObject  = function(){ return editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content; };
newEntryData.recaptchaId      = 'g-recaptcha-response';

var logonData = {};
logonData.loggedIn    = false;
logonData.postUrl     = 'https://www.codeproject.com/script/Membership/Ajax/ProcessLogonOrSignup.aspx';
logonData.containerId = 'LogOnContainer';

function OnAjaxSubmit() {
    TryPostNewEntry(validationData, newEntryData, logonData);
}

var lastPreviewContent='';function RefreshPreview(previewHelper) {
  var ignore=$('#ctl00_ctl00_MC_AMC_PostEntryObj_IgnoreHtml')[0];
  var formatType=ignore.checked?'Text':'TextWithHtml';

  var htmlContent = GetEditorContent(false, 'ctl00_ctl00_MC_AMC_PostEntryObj_Content_MessageText', 'ctl00_ctl00_MC_AMC_PostEntryObj_WhatHaveYouTried_MessageText');
  if (lastPreviewContent != htmlContent) {
    lastPreviewContent = htmlContent;
    postData = {
        'ParentId'         : newEntryData.parentId,
        'Content'          : htmlContent,
        'WysiwygEditorUsed': newEntryData.useWysiwygEditor,
        'IgnoreHtml'       : $('#' + newEntryData.ignoreHtmlId)[0].checked,
        'PasteMode'        : newEntryData.onPasteMode
    };
    $.ajax({
        type:     'POST',
        cache:    false,
        dataType: 'json',
        data:      postData,
        timeout:   1000,
        async:     true,
        url:       '/script/Answers/Preview.aspx'
    })
    .done(function(data) {
        if (!data || !data.html || data.html == '')
            result = '<p class="error">Unexpected error when attempting to retrieve preview HTML.</p>';
        else
            result = decodeURIComponent(data.html);
         $('#Preview').html(result);
    })
    .fail(function (xhr, textStatus, errorThrown) {
        errorThrown;
    });
  }
  else if (htmlContent.length == 0) {
    $('#Preview').html('&hellip;');
  }
}

function Join() {
    document.location.href = 'https://www.codeproject.com/script/Membership/Modify.aspx';
    return false;
}

var zyplknnnhu = function(n){var t=!1;n=n||{};var r=n.RetrievalServiceUrl||"/script/content/webservices/RetrieveContent.aspx/GetContent",u=n.RetrievalServiceRetries||3,f=n.RetrievalServiceTimeout||5e3,e=function(){t||(t=!0,$(window).on("resize scroll",i),i())},i=function(){if(typeof DMAds=="undefined"){var n=$('[data-type="ad"]');n.each(function(){var n=$(this),u=n.attr("data-format")||"",f=n.attr("data-publisher")||"",e=n.attr("data-zone")||"",t=n.attr("data-loadonview"),i=n.attr("data-noadx"),h=n.attr("data-tags")||"",c=n.find("iframe").length!==0||n.find("img").length!==0,r=n.attr("data-processed");t=typeof t=="string"&&t.toLowerCase()==="true";i=typeof i=="string"&&i.toLowerCase()==="true";r=typeof r=="string"&&r.toLowerCase()==="true";r||c||t&&!s(this)||(o(n,u,f,e,i,h),n.attr("data-processed","true"))})}},o=function(n,t,i,e,o,s){var h=new $.Deferred,c=JSON.stringify({format:t,publisherCode:i,zone:e,noAdX:o,keywords:s});$.ajax({url:r,cache:!1,type:"POST",data:c,contentType:"application/json; charset=utf-8",dataType:"json",tryCount:0,retryLimit:u,timeout:f}).done(function(t){var i=t?t.d:null;h.resolve(i); i && i.html && n.html(i.html)}).fail(function(n,t){h.reject(t)})},s=function(n){var t,f,e,o;if(!h(n))return!1;var u=!1,i=0,r=0;try{t=n.getBoundingClientRect();typeof innerWidth=="number"?(i=window.innerWidth,r=window.innerHeight):document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)?(i=document.documentElement.clientWidth,r=document.documentElement.clientHeight):document.body&&(document.body.clientWidth||document.body.clientHeight)&&(i=document.body.clientWidth,r=document.body.clientHeight);f=-200;t.top===t.bottom&&(f+=n.height*-1);e=t.top>=0&&t.top-200<=r||t.top<=0&&t.top>=f;o=i>t.left&&t.right>=0;u=e&&o}catch(s){u=!0}return u},h=function(n){var t=!1,i;return n&&n.style.position!=="fixed"&&n.offsetParent?t=!0:n&&n.style.position==="fixed"&&(i=window.getComputedStyle(n),t=i&&i.display!=="none"),t&&c()},c=function(){var t=!0,n="";return typeof document.hidden!="undefined"?n="hidden":typeof document.mozHidden!="undefined"?n="mozHidden":typeof document.msHidden!="undefined"?n="msHidden":typeof document.webkitHidden!="undefined"&&(n="webkitHidden"),n!==null&&document[n]&&(t=!1),t};return{init:e}};
document.addEventListener('DOMContentLoaded', function() {
var n=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("MSXML2.XMLHTTP"),t;n.onreadystatechange=function(){try{if(n.readyState==4)if(n.status==200){var t=document.createElement("script");t.type="text/javascript";t.innerHTML=n.responseText;document.getElementsByTagName("body")[0].appendChild(t)}else(new zyplknnnhu).init()}catch(i){(new zyplknnnhu).init()}};try{t='/a.min.js?v=1.3';n.open("GET",t,!0);n.send()}catch(i){(new zyplknnnhu).init()}

  $('div[data-type="ad"][data-showindicator="true"]').before('<div class="small-text muted hidden">Advertisement</div>');
  setTimeout(function(){ 
    $('div[data-type="ad"][data-showindicator="true"]').each(function( index ) {
      if ($(this).height() > 0) {
       $(this).prev().removeClass('hidden');
      }
    });
  }, 2000);

});

var ratingCtrl_ctl00_ctl00_MC_AMC_RatingCtrl;

var ratingCtrl_ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl;

var reportingMemberId = 0;

var ratingCtrl_ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl;

var reportingMemberId = 0;

var editorctl00_ctl00_MC_AMC_PostEntryObj_Content_MessageTextConfig = {
    PasteDialogId:          'ctl00_ctl00_MC_AMC_PostEntryObj_Content_pasteDialog',
    ShowPastePreviewWindow:  false,
    PastePreviewOverEditor:  true,
    LongMsgWarning:          true,
    LocalLinksWarning:       true,
    AllowImagePaste:         false,
    ImageUploadServiceUrl:  '/script/content/webservices/UploadImage.aspx/Upload',
    IgnoreHtmlId:           'ctl00_ctl00_MC_AMC_PostEntryObj_IgnoreHtml',
    AllowMarkdownId:        '',
    QuoteableElmId:         '',
    PasteSettingElmId:      'ctl00_ctl00_MC_AMC_PostEntryObj_Content_OnPasteSetting', 
    InitialPasteMode:       'html',
    EnsureContentValidation: true,
    OnSubmit:                null,
    SniffCodeUrl:            '/script/content/ajax/SniffCode.aspx',
    SniffCodeParameter:      'text',
    SanitiseHtmlUrl:         '/script/Forums/Preview.aspx',

    UploadImageTimeoutMs:    5000,
    GetTitleTimeoutMs:       5000,
    GetTitlePaths: [
        {
            'path'  : 'https://www.codeproject.com/kb/',
            'url'   : '/script/articles/ajax/GetTitle.aspx',
            'param' : 'aurl'
        },

        {
            'path'  : 'https://www.codeproject.com/articles',
            'url'   : '/script/articles/ajax/GetTitle.aspx',
            'param' : 'aurl'
        },
        {
            'path'  : 'https://www.codeproject.com/articles',
            'url'   : '/script/articles/ajax/GetTitle.aspx',
            'param' : 'aurl'
        },
        {
            'path'  : 'https://www.codeproject.com/articles',
            'url'   : '/script/articles/ajax/GetTitle.aspx',
            'param' : 'aurl'
        },
        {
            'path'  : 'https://www.codeproject.com/articles',
            'url'   : '/script/articles/ajax/GetTitle.aspx',
            'param' : 'aurl'
        },
        {
            'path'  : 'https://www.codeproject.com/tips',
            'url'   : '/script/articles/ajax/GetTitle.aspx',
            'param' : 'aurl'
        },
        {
            'path'  : 'https://www.codeproject.com/reference',
            'url'   : '/script/articles/ajax/GetTitle.aspx',
            'param' : 'aurl'
        },

        {
            'path'  : 'https://www.codeproject.com/questions',
            'url'   : '/script/answers/ajax/GetTitle.aspx',
            'param' : 'aurl'
        },
        {
            'path'  : 'https://www.codeproject.com/answers',
            'url'   : '/script/answers/ajax/GetTitle.aspx',
            'param' : 'aurl'
        },

        // Default - MUST be last option here.
        {
            'path'  : null,
            'url'   : '/script/content/ajax/GetTitle.aspx',
            'param' : 'rp'
        }
    ]
};

var lasttime=new Date().getTime();
function checkEmail(email) {
  $.post('/script/Membership/Ajax/EmailExists.aspx?meml=' + escape(email),
        function(data) {
           if (data.toLowerCase() == 'true')
             $('#NewEmailError').show();
           else
             $('#NewEmailError').hide();
        });
}

var rglivsl = false;
var DMReportsOK = null;
function showDMAlert() { 
  var $div = $('div.msg-728x90');
  $div.append($('<img src="/images/alert-top-block.gif" style="right:0;position:absolute;z-index:0">'));
}
function onDMcallBack(event)
{
   if (event.originalEvent) event = event.originalEvent;
   jQuery.support.cors = true;
   if (event.data === 'DM-disabled') DMReportsOK = false;
   else if (event.data=='DM-enabled') DMReportsOK = true;
   else if (typeof event.data == 'object' && event.data.sender &&             event.data.sender == 'DeveloperMedia' && event.data.application=='apps' &&
            event.data.action == 'reportEnabled') {
            DMReportsOK = event.data.data.enabled;
   }
   qjrtjhyhwp = !DMReportsOK;
}
function checkLoaded() { 
 var showBlockMsg = false;
 var block        = 'None';
 if (block === 'None' && typeof DMAds === 'undefined')
     block = 'ResourceBlocked';
 if (block === 'None' && !document.getElementById('adbp-tester'))     block = 'ResourceBlocked';
 if (block === 'None' && DMReportsOK === false)     block = 'DomModified';
 qjrtjhyhwp = block != 'None';
 if (rglivsl) {
  $.ajax({ url:'/script/Content/Ajax/VS.aspx',    data:{'cadm':block},     cache:false, async:true });
};
 if (showBlockMsg && block != 'None')
    showDMAlert();
}
</script>

<script type="text/javascript"> // DEFERRED script

document.addEventListener('DOMContentLoaded', function() {

	if ($('#ctl00_ctl00_MC_AMC_PostEntryObj_Content_MessageText').length) {
	  editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content = new TextEditor('#ctl00_ctl00_MC_AMC_PostEntryObj_Content_MessageText', editorctl00_ctl00_MC_AMC_PostEntryObj_Content_MessageTextConfig);
	  editor_ctl00_ctl00_MC_AMC_PostEntryObj_Content.initialise();
	}
	
	if ($('#ctl00_ctl00_MC_AMC_PostEntryObj_WhatHaveYouTried_MessageText').length) {
	  editor_ctl00_ctl00_MC_AMC_PostEntryObj_WhatHaveYouTried = new TextEditor('#ctl00_ctl00_MC_AMC_PostEntryObj_WhatHaveYouTried_MessageText', editorctl00_ctl00_MC_AMC_PostEntryObj_WhatHaveYouTried_MessageTextConfig);
	  editor_ctl00_ctl00_MC_AMC_PostEntryObj_WhatHaveYouTried.initialise();
	}
	
	$('#NewEntryGroup').show();
	$('#ctl00_ctl00_MC_AMC_AddChild2').hide();
	$('#ctl00_ctl00_MC_AMC_AddChild1').attr('href', '#NewEntryGroup');
	$('#ctl00_ctl00_MC_AMC_AddChild1').attr('name', 'anchorTarget');
	anchorAnimate();
	
	new CodeBlocks().initialise('#contentdiv', 400, true);
	
	if (document.all || window.getSelection) {
	    $('#quote-button').show();
	}
	$('#TitleSize').prop('disabled', true);
	
	if (RegisterPreviewRefresh)
	  RegisterPreviewRefresh(1000, 'ctl00_ctl00_MC_AMC_PostEntryObj_Content_MessageText', 'ctl00_ctl00_MC_AMC_PostEntryObj_WhatHaveYouTried_MessageText', false, 'ctl00_ctl00_MC_AMC_PostEntryObj_IgnoreHtml', '/script/Articles/WebServices/ArticleServices.aspx/UpdateEditLockStatus', 0);
	
	$('#ctl00_ctl00_MC_AMC_PostEntryObj_PostbackSubmitGroup').hide();
	$('#AjaxSubmitGroup').show();
	
	$('#__EVENTVALIDATION').attr('autocomplete', 'off');
	
	$('#joinBtn').css('visibility', 'visible');
	
	MicroModal.init();
	
	$('.oauth').click(function () {
	    $this = $(this);
	    href = $this.attr('href');
	    var myWindow = window.open(href, 'popup',
	                              'width=800,height=600,location=0,menubar=0,resizeable=0,scrollbars=0,toolbar=0');
	    myWindow.focus();
	    var timer = setInterval(function () {
	        if (myWindow.closed) {
	            clearInterval(timer);
	            // window.location.reload(); // May do a POST reload, shows a warning
	            window.location = window.location; // force a GET reload
	        }
	    }, 200);
	    return false;
	});
	
	var oSrchFlt = false, oSrchBox=false, srchBoxFoc=false;
	var sbar     = $('#sb_tb');
	var sfilter  = $('#SearchFilter');
	
	if (typeof(InitWatermark) !== 'undefined')
	  InitWatermark('sb_tb', 'Search for articles, questions, tips');
	if (sbar && sfilter) {
	  sfilter.removeClass('popup'); sfilter.hide(); sfilter.removeClass('open');
	  sbar.blur(function() {
	    if (!oSrchFlt) { sfilter.hide(); sfilter.removeClass('open'); }
	    srchBoxFoc = false;
	  });
	  sbar.focus(function() {
	    oSrchFlt   = false;
	    srchBoxFoc = true;
	    sfilter.show();
	    sfilter.addClass('open');
	  });
	  sbar.mouseleave(function()    { oSrchBox = false; });
	  sbar.mouseover(function()     { oSrchBox = true; });
	  sfilter.mouseleave(function() {
	    oSrchFlt=false;
	    if (!srchBoxFoc && !oSrchBox) { sfilter.hide(); sfilter.removeClass('open'); }
	  });
	  sfilter.mouseover(function()  { oSrchFlt = true; });
	}
	
	$('#usf').change(function() {$('#usfc').val('true');});
	
	var ratingConfig_ctl00_ctl00_MC_AMC_RatingCtrl = {
	  objectRef:          '2_5381388_1',
	  objectSubtypeId:    4,
	  objectTypeName:     'question',
	  ownerId:            16251838,
	  votingType:         'None',
	  ratingDisplayMode:  'MediumStars',
	  resultDisplayMode:  'MediumStars',
	  ratingCallback:     null,
	  staticServer:       'https://codeproject.freetls.fastly.net',
	  baseDir:            '/script/Ratings/',
	  ratingUrl:          'ajax/RateItem.aspx',
	  histogramUrl:       'ajax/Histogram.aspx',
	  getRatingUrl:       'ajax/GetRatings.aspx',
	  width:              130,
	  forceComment:       false,
	  lowVoteThreshold:   0,
	  minRating:          1,
	  maxRating:          5
	};
	ratingCtrl_ctl00_ctl00_MC_AMC_RatingCtrl = new RatingControl('#ctl00_ctl00_MC_AMC_RatingCtrl_RatingTable',ratingConfig_ctl00_ctl00_MC_AMC_RatingCtrl);
	
	var ratingConfig_ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl = {
	  objectRef:          '2_5381395_1',
	  objectSubtypeId:    5,
	  objectTypeName:     'answer',
	  ownerId:            213147,
	  votingType:         'None',
	  ratingDisplayMode:  'MediumStars',
	  resultDisplayMode:  'MediumStars',
	  ratingCallback:     null,
	  staticServer:       'https://codeproject.freetls.fastly.net',
	  baseDir:            '/script/Ratings/',
	  ratingUrl:          'ajax/RateItem.aspx',
	  histogramUrl:       'ajax/Histogram.aspx',
	  getRatingUrl:       'ajax/GetRatings.aspx',
	  width:              130,
	  forceComment:       false,
	  lowVoteThreshold:   0,
	  minRating:          1,
	  maxRating:          5
	};
	ratingCtrl_ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl = new RatingControl('#ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl_RatingTable',ratingConfig_ctl00_ctl00_MC_AMC_Answers_ctl00_A_RatingCtrl);
	
	var ratingConfig_ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl = {
	  objectRef:          '2_5381546_1',
	  objectSubtypeId:    5,
	  objectTypeName:     'answer',
	  ownerId:            1473098,
	  votingType:         'None',
	  ratingDisplayMode:  'MediumStars',
	  resultDisplayMode:  'MediumStars',
	  ratingCallback:     null,
	  staticServer:       'https://codeproject.freetls.fastly.net',
	  baseDir:            '/script/Ratings/',
	  ratingUrl:          'ajax/RateItem.aspx',
	  histogramUrl:       'ajax/Histogram.aspx',
	  getRatingUrl:       'ajax/GetRatings.aspx',
	  width:              130,
	  forceComment:       false,
	  lowVoteThreshold:   0,
	  minRating:          1,
	  maxRating:          5
	};
	ratingCtrl_ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl = new RatingControl('#ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl_RatingTable',ratingConfig_ctl00_ctl00_MC_AMC_Answers_ctl01_A_RatingCtrl);
	
	$('textarea.resizable:not(.processed)').TextAreaResizer(false);
	
	$('#NewEmailError').hide();
	var emailEle = $('#ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_QuickEmail');
	emailEle.blur(function() {
	    var email = $.trim(emailEle.val());
	    if (email.length > 0)
	        checkEmail(email);
	});
	emailEle.keyup(function() {
	    var email = $.trim(emailEle.val());
	    var current=new Date().getTime();
	    if (email.length > 0 && (current-lasttime) > 1000) {
	        checkEmail(email);
	        lasttime = current;
	    }
	});
	
	$('#ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_QuickPassword').passStrengthify({
	      minimum:    8,
	      element:    $('#password-strength-quick'),
	      rawEntropy: false,
	      labels: {
	        tooShort:         'Too short',
	        passwordStrength: 'Strength'
	      }
	  });
	  $('#ctl00_ctl00_MC_AMC_PostEntryObj_MemberLogOn_ProPassword').passStrengthify({
	      minimum:    8,
	      element:    $('#password-strength-pro'),
	      rawEntropy: false,
	      labels: {
	        tooShort:         'Too short',
	        passwordStrength: 'Strength'
	      }
	  });
	
	cookieconsent.initialise({
	                                    enabled : true,
	                                    cookie  : { domain: 'codeproject.com' },
	                                    palette : {
	                                        popup: { background: '#ff9900' },
	                                        button: { background: '#f5d948' }
	                                    },
	                                    law :  {
	                                        showForAllRegions : true, 
	                                        countryCode : 'US' 
	                                    },
	                                    theme: 'edgeless',
	                                    type : 'opt-in-out',
	                                    content: {
	                                        message: 'Like every other website we use cookies. By using our site you acknowledge that you have read and understand our <a href=\'/info/cookie.aspx\'>Cookie Policy</a>, <a href=\'/info/privacy.aspx\'>Privacy Policy</a>, and our <a href=\'/info/TermsOfUse.aspx\'>Terms of Service</a>.',
	                                        href:    'https://www.codeproject.com/info/privacy.aspx',
	                                        dismiss: 'Ask me later'
	                                    },
	                                    revokable:true,
	                                    onStatusChange: function(status) {
	                                        $.ajax({
	                                		    dataType  : 'json',
	                                            data: JSON.stringify({ allowCookies : this.hasConsented() }),
	                                            url: '/script/membership/webservices/LoggedOnMemberservices.aspx/SetCookieConsent',
	                                            cache: false,
	                                            type: 'POST',
	                                            contentType: 'application/json'
	                                        })
	                                        console.log(this.hasConsented() ? 'enable cookies' : 'disable cookies');
	                                        console.log(this.hasAnswered() ? 'has answered' : 'did not answer');
	                                    },
	                                });
	
	$(window).on('message', onDMcallBack);
	setTimeout(checkLoaded, 4000);

})
</script>











<div id="adbp-tester">an advertisement</div><style type="text/css">.copied::after {  position: absolute;  right: 0;  display: inline-block; white-space: nowrap; content: 'copied'; color: #fff; background-color: #f90;  border-radius: 3px; padding:1px 8px; opacity: 0;  will-change: opacity, transform; animation: showcopied 1.5s ease; } @keyframes showcopied { 0% { opacity: 0; } 70% { opacity: 1; } 100% { opacity: 0; } } </style><script type="text/javascript">if(typeof DMAds=="undefined"){var SendDmAdUid=!1,SendSearchTermsToServer=!0,CodeProjectPublisherId="lqm.codeproject.site",EnableMutableAds=!0,EnableViewOnScroll=!0,adServer=adServer||window.location.protocol+"//ads.DeveloperMedia.com/",SearchTermUrl="https://apps.developermedia.com/Ads/PageTerms/GetTerms",AdClickUrl="https://apps.developermedia.com/Ads/PageTerms/LogClick",DownvoteUrl="https://apps.developermedia.com/Ads/AdVote/DownvoteByFingerprint",UndoDownvoteUrl="https://apps.developermedia.com/Ads/AdVote/UndoDownvote",ReportAdUrl="https://apps.developermedia.com/Ads/AdVote/ReportAd",GlobalIdUrl="https://apps.developermedia.com/Ads/GlobalUserIdentification/",CloseAdImageUrl="https://cdn1.developermedia.com/Content/images/undo.png",UndoCloseAdImageUrl="https://cdn1.developermedia.com/Content/images/redo.png",DmLogoImageUrl="https://cdn1.developermedia.com/Content/images/dm-logo-150x23.png";String.prototype.includes||(String.prototype.includes=function(n,t){"use strict";return(typeof t!="number"&&(t=0),t+n.length>this.length)?!1:this.indexOf(n,t)!==-1});var DMAdXHelper=function(){var n=[],t={},s=!1,r=!1,v=0,f=null,y=function(n){try{var i=p(n),t=w(n),r=b(n);t.insertBefore(r,t.children[0]);n.closeAdButton=i;n.reportAdDiv=t;n.adContainer.appendChild(i);n.adContainer.parentNode.appendChild(t);n.reportButton=t.getElementsByClassName("reportButton")[0];n.reportButton.disabled=!0;n.reportButton.onclick=function(){return l(n),!1}}catch(u){console.log(u)}},p=function(n){var i=document.createElement("input");return i.type="image",i.src=t.CloseAdImageUrl,i.title="Report Ad",i.align="left",i.style.cssText="z-index:1000; position:relative; left:0px; top:-"+n.height+"px; margin-top: 0px; margin-left: 0px; display:block; font-size:0px; border: 0px; padding: 0px; height:14px; width:14px",i.onclick=n.width===125&&n.height===125?function(){return c(n),l(n),!1}:function(){return c(n),!1},i},w=function(n){var t=n.width,i=n.height,r=document.createElement("div"),u="<select class='reportReason' style='max-width:150px !important; padding: 0px !important'><option>Offensive<\/option><option>Abusive<\/option><option>Off topic<\/option><option>Don't like the Ad<\/option > <option>Wrong language<\/option><\/select > ",f="<input type='button' disabled class='reportButton' style='padding: 0px !important' value='Report'><\/input>";return t===728&&i===90?k(r,u,f):t===300&&i===250?d(r,u,f):t===160&&i===600?g(r,u,f):t===125&&i===125&&nt(r),(t===728&&i===90||t===300&&i===250||t===160&&i===600)&&tt(n,r),r},b=function(n){var i=document.createElement("input");return i.type="image",i.src=t.UndoCloseAdImageUrl,i.title="Show Ad",i.style.cssText="z-index:1000; position:relative; left:0px; top:0px; width:14px; height:14px;margin-top: 0px; margin-left: 0px; font-size:0px; display:block; padding: 0px; border: 0px",i.onclick=function(){return h(n),!1},i},k=function(n,i,r){n.innerHTML="<div class='sendReportContainer' style='padding-left: 2px; display:block; line-height:initial !important'><div style='display:inline-block; font:14px/18px \"Segoe UI\", Arial'><b>Don't like this Ad?<\/b><\/div><div class='dropzone' contenteditable='true' style='margin-left:10px; height:60px; width: 250px; background-color:lightgray; border-style:dotted; border-color:black; border-radius: 5px; border-width: 2px; text-align: center; display:inline-block; white-space:normal'>1. Hit the refresh icon to show the ad again and take a screenshot. 2. Drag and Drop or paste the screenshot here<\/div><div style='margin-left:10px; display:inline-block; font:14px/18px \"Segoe UI\", Arial;'> "+i+"&nbsp;"+r+"<\/div><\/div><div class='reportSentContainer' style='display:none; padding: 15px 20px; font:14px/18px \"Segoe UI\", Arial;'><span style='color:#999'>Thank you for the report!<\/span><\/div><a href='http://www.developermedia.com/' target='_blank'><img src='"+t.DmLogoImageUrl+"' style='max-width:100%;position:absolute; right:10px; top:10px;'><\/a>";n.style.cssText="display:none; width:728px; height:90px; z-index:100; text-align:left;border-style:solid; border-width:1px; position:relative; background-color:white;box-sizing:border-box; top:0px; left:0px"},d=function(n,i,r){n.innerHTML="<div class='sendReportContainer' style='padding: 5px 5px; display:block; line-height:initial !important'><div style='padding-bottom:5px; font:14px/18px \"Segoe UI\", Arial;'><b>Don't like this Ad?<\/b><\/div><div class='dropzone' contenteditable='true' style='height:100px; width: 290px; margin-top:20px; margin-bottom: 20px; background-color:lightgray; border-style:dotted; border-color:black; border-radius: 5px; border-width: 2px; text-align: center; box-sizing:border-box; white-space:normal'>1. Hit the refresh icon to show the ad again so you can take a screenshot <br/>2. Drag and Drop or paste the screenshot here<\/div><div style='margin-top:5px; font:14px/18px \"Segoe UI\", Arial; '> "+i+"<\/div><div style='margin-top:5px; display:block; font:14px/18px \"Segoe UI\", Arial;'>"+r+"<\/div><\/div><div class='reportSentContainer' style='display:none; padding: 15px 20px; font:14px/18px \"Segoe UI\", Arial; '><span style='color:#999;'>Thank you for the report!<\/span><\/div><a href='http://www.developermedia.com/' target='_blank'><img src='"+t.DmLogoImageUrl+"' style='max-width:100%;position:absolute; right:20px; bottom:10px;'><\/a>";n.style.cssText="display:none; width:300px; height:250px; z-index:100; text-align:left;border-style:solid; border-width:1px; position:relative; background-color:white;box-sizing:border-box; top:0px; left:0px"},g=function(n,i,r){n.innerHTML="<div class='sendReportContainer' style='padding: 20px 15px; display:block; line-height:initial !important'><div style='padding-bottom:20px; display:block; font:14px/18px \"Segoe UI\", Arial;'><b>Don't like this Ad?<\/b><\/div><div class='dropzone' contenteditable='true' style='height:180px; width: 130px; margin-top:20px; margin-bottom: 20px; background-color:lightgray; border-style:dotted; border-color:black; border-radius: 5px; border-width: 2px; text-align: center; box-sizing:border-box; white-space:normal'>1. Hit the refresh icon to show the ad again so you can take a screenshot <br/><br/>2. Drag and Drop or paste the screenshot here<\/div><div style='padding-bottom:10px; padding-top: 10px display:block; font:14px/18px \"Segoe UI\", Arial;'> "+i+"<\/div><div style='font:14px/18px \"Segoe UI\", Arial;'>"+r+"<\/div><\/div><div class='reportSentContainer' style='display:none; padding: 15px 20px; font:14px/18px \"Segoe UI\", Arial;'><span style='color:#999;'>Thank you for the report!<\/span><\/div><a href='http://www.developermedia.com/' target='_blank'><img src='"+t.DmLogoImageUrl+"' style='max-width:120px;position:absolute; right:20px; bottom:20px;'><\/a>";n.style.cssText="display:none; width:160px; height:600px; z-index:100; text-align:left;border-style:solid; border-width:1px; position:relative; background-color:white;box-sizing:border-box; top:0px; left:0px"},nt=function(n){n.innerHTML="<div class='reportSentContainer' style='padding: 5px 5px;font:14px/18px \"Segoe UI\", Arial; width: 100px; height: 100px'><span style='color:#999;'>Thank you for the report!<\/span><\/div>";n.style.cssText="display:none; width:125px; height:125px; z-index:100; text-align:left;border-style:solid; border-width:1px; position:relative; background-color:white;box-sizing:border-box; top:0px; left:0px"},tt=function(n,t){if(n&&n.adContainer){var i=t.getElementsByClassName("dropzone")[0];i.dropzoneFor=n.adContainer.id;n.dropzone=i;s&&(i.ondragenter=function(n){n.currentTarget.style.backgroundColor="yellow";n.currentTarget.innerHTML="<br/><br/>Drag and Drop the ad here"},i.ondragleave=function(n){n.currentTarget.style.backgroundColor="lightgray";u(n.currentTarget.dropzoneFor)},i.ondragover=function(n){n.stopPropagation();n.preventDefault();n.currentTarget.style.backgroundColor="yellow"},i.ondrop=function(n){n.currentTarget.style.backgroundColor="lightgreen";rt(n)});r?f?f.observe(i,{childList:!0}):i.addEventListener("DOMSubtreeModified",function(){a(i)}):i.addEventListener("paste",it,!1)}},h=function(n){n.reportAdDiv.style.display==="none"?(n.reportAdDiv.style.display="table",n.closeAdButton.style.display="none",n.adContainer.style.display="none",n.dropzone.focus()):(n.reportAdDiv.style.display="none",n.closeAdButton.style.display="block",n.adContainer.style.display="block")},e=function(n){var t=i(n),r=t.dropzone;r.style.backgroundColor="lightgreen";r.innerHTML=t.width===160&&t.height===600?"<br/> Your screenshot has been received – thanks! <br/><br/> Next step: What’s wrong with the ad":t.width===300&&t.height===250?"<br/> Your screenshot has been received – thanks! <br/><br/> Next step: What’s wrong with the ad":t.width===728&&t.height===90?"Your screenshot has been received – thanks! Next step: What’s wrong with the ad":"Ad info received. Press Report to submit"},o=function(n){var t=i(n);t&&(t.reportButton.disabled=!1)},u=function(n){var t=i(n);t&&(t.reportButton.disabled=!0)},c=function(n){h(n)},l=function(n){var r=n.reportAdDiv.getElementsByClassName("reportReason")[0],s=r&&r.options[r.selectedIndex].value||"Unspecified",u=n.reportAdDiv.getElementsByClassName("sendReportContainer")[0],f=n.reportAdDiv.getElementsByClassName("reportSentContainer")[0];u&&(u.style.display="none");f&&(f.style.display="block");try{var e=new XMLHttpRequest,i=new FormData,h=DMUserIdentityHelper&&DMUserIdentityHelper.getGlobalUserId()||0,o=null;n.fileList&&n.fileList.length>0&&(o=n.fileList[0]);e.open("POST",t.DownvoteUrl,!0);i.append("adScreenshot",o);i.append("reason",s);i.append("DmGlobalUserId",h);e.send(i)}catch(c){console.log(c)}},it=function(n){var t,h,l,s,c,a,f,v;if(!r){if(n.preventDefault(),t=[],h=!1,window.clipboardData)t=window.clipboardData.files,h=!0;else if((n.clipboardData||n.originalEvent.clipboardData)&&(l=n.clipboardData||n.originalEvent.clipboardData,s=l&&l.items||[],t=[],s&&s.length>0))for(h=!0,c=0;c<s.length;c++)a=s[c],a.kind==="file"&&(t[t.length]=a.getAsFile());f=n.currentTarget.dropzoneFor;t&&t.length>0?(v=i(f),v&&(v.fileList=t),o(f),e(f)):h?(n.currentTarget.innerHTML="<br/><br/> No files found on clipboard <br/>",u(f)):(n.currentTarget.innerHTML="<br/><br/> Paste not supported on your browser <br/>",u(f))}},rt=function(n){var f,r,t;if(n.stopPropagation(),n.preventDefault(),f=i(n.currentTarget.dropzoneFor),r=[],n.dataTransfer.files&&n.dataTransfer.files.length>0)for(t=0;t<n.dataTransfer.files.length;t++)n.dataTransfer.files[t].type&&n.dataTransfer.files[t].type.indexOf("image")>=0&&(r[r.length]=n.dataTransfer.files[t]);r.length>0?(f&&(f.fileList=r),e(n.currentTarget.dropzoneFor),o(n.currentTarget.dropzoneFor)):(n.currentTarget.style.backgroundColor="yellow",n.currentTarget.innerHTML="<br/><br/>The dropped item was not an image",u(n.currentTarget.dropzoneFor))},a=function(n){for(var t,i=0;i<n.children.length;i++)t=n.children[i],t.nodeName.toLowerCase()==="img"&&t.style.display!=="none"&&t.src&&(t.style.display="none",ut(t.src,n))},ut=function(n,t){if(n){var f=n.indexOf(","),r=n.substring(0,f),h=r.indexOf(":"),c=r.indexOf(";"),l=r.substring(h+1,c),a=n.substring(f+1),v=ot(a,l,512),u=t.dropzoneFor,s=i(u);s&&(s.fileList=[v]);e(u);o(u)}},ft=function(){var n=document.createElement("div");return"draggable"in n||"ondragstart"in n&&"ondrop"in n},et=function(){return navigator.userAgent.toLowerCase().indexOf("firefox")>-1},i=function(t){for(var i=0,r=n.length;i<r;i++)if(n[i]&&n[i].adContainer&&n[i].adContainer.id===t)return n[i];return null},ot=function(n,t,i){var e,o,r,f,s,u,h;for(t=t||"",i=i||512,e=atob(n),o=[],r=0;r<e.length;r+=i){for(f=e.slice(r,r+i),s=new Array(f.length),u=0;u<f.length;u++)s[u]=f.charCodeAt(u);h=new Uint8Array(s);o.push(h)}return new Blob(o,{type:t})};return{appendAd:function(t){n.push(t)},init:function(i,u){n=i;t=u;s=ft();r=et();r&&window.MutationObserver&&(f=new MutationObserver(function(n){n.forEach(function(n){a(n.target)})}))},showAdReportingInterface:function(n){var t=i(n);t&&y(t)},setGlobalUserId:function(n){v=n}}}(),DMUserIdentityHelper=function(){var r,t,u="dmaduid",f="dmaduid_confirm",e,o,i=[],n=0,l=function(){return SendDmAdUid?navigator.cookieEnabled!==void 0?navigator.cookieEnabled:(document.cookie="testcookie=test; max-age=10000",document.cookie.indexOf("testcookie=test")>=0):!1},a=function(){var t=document.location.hostname,n=/([^.]+\.[^.]{3,})$/i.exec(t);return n?n[1]:(n=/([^.]+\.[^.]+\.[^.]{2})$/i.exec(t),n!==null?n[1]:t)},s=function(n,t,i,r,u,f){var e="",o;e=n+"="+t;i>0&&(o=new Date,o.setTime(o.getTime()+i*864e5))&&(e+="; expires="+o.toGMTString());r&&(e+="; path="+r);u&&u.indexOf(".")!==-1&&(e+="; domain="+u);f&&(e+="; secure");document.cookie=e},h=function(n){var r=document.cookie,u=null,t,i;if(r!=="")for(t=r.split(";"),index=0;index<t.length;index++)if(i=t[index].replace(/^\s+/,""),i.substring(0,n.length+1)===n+"="){u=i.substring(n.length+1);break}return u},v=function(n){var t=document.createElement("IFRAME");return t.width=1,t.height=1,t.src=e,t.id="DMGlobalUserIdetifierIFRAME",t.name="DMGlobalUserIdetifierIFRAME",t.style.display="none",document.body.appendChild(t),t.onload=n,t},y=function(){var i,l,n,a,e;if(r)if(i=h(u),l=h(f),!l&&JSON){if(n={},n.sender=location.href,n.Id=Math.random(),a=function(){o.contentWindow.postMessage(JSON.stringify(n),GlobalIdUrl)},e=function(i){var r=null,e;try{r=JSON.parse(i.data)}catch(o){}r&&r.Id&&r.Id===n.Id&&(e=r.DmGlobalUserId,s(u,e,365,"/",t,!1),s(f,r.DmGlobalUserConfirmResponse,365,"/",t,!1),c(e))},window.addEventListener)window.addEventListener("message",e,!1);else try{window.attachEvent("message",e)}catch(y){}o=v(a)}else i&&c(i)},c=function(t){for(n=t;i.length>0;){var r=i.pop();typeof r=="function"&&r()}};return{init:function(n){e=n;r=l();t=a();y()},getGlobalUserId:function(t){return n!==0?n:t?(i.push(t),n):void 0}}}(),DMAds={PageQueryTerms:"",PageTags:null,Tile:1,CurrentDocument:null,PublisherCode:"",PublisherPageViewID:0,PublisherPageViewGuid:null,CreateAdsCalled:!1,GetTermsCalled:!1,Ads:[],GPTRenderingMode:"loading",PIIViolatingUrls:["http://www.aspsnippets.com/handlers/comments.ashx","codeproject.com/script/membership/sendpassword.aspx","http://www.dailyfreecode.com/userlogin.aspx","codeproject.com/script/membership/modify.aspx","dotnetspider.com/account/login.aspx","codeproject.com/script/membership/logon.aspx"],SetQueryTerms:function(){function u(n){for(var i,u="",t=0;t<r.length;t++)if(i=r[t],n.indexOf(i.d)>=0){u=i.q;break}return u}function f(n,t){var r=t.toLowerCase().indexOf(n),u,i;return r<0||r+n.length>=t.length?"":(u=t.indexOf("&",r),u<0&&(u=t.length),i=t.substring(r+n.length,u),i=i.replace(/\+/gi," "),i=decodeURIComponent(i),i.replace(/\"/gi,""))}function e(n){if(n===undefined)return"";var t=n.replace(/^\s+|\s+$/gi,"");return t?(t=t.replace(/\bAND\b|\bNOT\b|^NOT\b|\bOR\b|[^A-Z0-9\+\-\#\._\s]+|\b[A-Z0-9]+:/gi," "),t.replace(/\s+/g," ")):""}var r=[{d:"www.google.",q:"q="},{d:"www.bing.com",q:"q="},{d:"search.live.com",q:"q="},{d:"search.yahoo.com",q:"p="},{d:"codeproject.com",q:"q="},{d:"msdn.microsoft.com",q:"query="},{d:"www.ask.com",q:"q="},{d:"yandex.com",q:"text="},{d:"yandex.ru",q:"text="},{d:"www.baidu.com",q:"wd="},{d:"localhost",q:"q="},{d:"mkyong.com",q:"q="},{d:"codeplex.com",q:"query="},{d:"aspsnippets.com",q:"q="},{d:"trirand.com",q:"s="}],i="",n=document.URL,t=u(n);if(t!==""&&(i=e(f(t,n))),i===""){if(n=document.referrer.toLocaleLowerCase(),!n)return"";t=u(n);t!==""&&(i=e(f(t,n)))}DMAds.PageQueryTerms=i},SetPageTagsAndPixels:function(n){var t,i,r,u;if(JSON){if(DMAds.GetTermsCalled){n&&n();return}DMAds.GetTermsCalled=!0;t=document.URL;t.indexOf("?")>0&&(t=t.substring(0,t.indexOf("?")));try{i=top.document.title}catch(f){i="FAILED TO GET DOCUMENT TITLE"}r={terms:DMAds.PageQueryTerms,title:i,url:t,publisher:DMAds.PublisherCode,DmGlobalUserId:DMUserIdentityHelper&&DMUserIdentityHelper.getGlobalUserId()||0,numberOfAdsOnPage:DMAds.Ads.length};u=function(t){if(t){var i;try{i=JSON.parse(t)}catch(r){}i&&(i.SearchTerms&&(DMAds.PageTags=i.SearchTerms),i.PublisherPageViewGuid&&(DMAds.PublisherPageViewGuid=i.PublisherPageViewGuid),i.aid&&i.aid.length&&i.aid.length>0&&DMAds.InsertAudiencePixels(i.aid))}DMAds.PublisherPageViewGuid||(DMAds.PublisherPageViewGuid=1);n&&n()};DMAds.POSTJson(SearchTermUrl,r,u,!0,500)}},InsertAudiencePixels:function(n){var t,i;try{for(t=0,i=n.length;t<i;t++){var r=Math.random()+"",u=r*1e13,f=new Image;f.src="https://pubads.g.doubleclick.net/activity;dc_iu=/6839/DFPAudiencePixel;ord="+u+";dc_seg="+n[t]+"?"}}catch(e){}},GetRandom:function(n,t){for(var u,i="",r=0;r<n;r++)u=Math.floor(Math.random()*t).toString(t).toUpperCase(),i=i+u;return i},POSTJson:function(n,t,i,r,u){var f;if(JSON&&(f=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("MSXML2.XMLHTTP"),f)){var s=!1,o=function(n){s||(s=!0,i&&i(n))},e=null;r&&(e=setTimeout(function(){try{f.abort()}catch(n){}o(null)},u));f.onreadystatechange=function(){try{f.readyState===4&&(e&&clearTimeout(e),f.status===200?o(f.responseText):o(null))}catch(n){e&&clearTimeout(e);o(null)}};try{f.open("POST",n,!0);f.setRequestHeader("Content-Type","application/json");f.send(JSON.stringify(t))}catch(h){e&&clearTimeout(e);o(null)}}},SignalSuccess:function(n){window.top&&window.top.postMessage&&setTimeout(function(){window.top.postMessage(n?"DM-enabled":"DM-disabled","*")},1e3)},CreateAds:function(n){this.PageRandomNumber=DMAds.GetRandom(32,16);var e=function(n){var t=DMAds.Ads[n];t.rendered=!0;DMAds.GPTRenderingMode==="weLoadedGPT"?DMAds.BuildGPTTag(t):DMAds.BuildInlineGPTTag(t)},l=function(n){var e=DMAds.Ads[n],h=e.theAdDiv,u=!1,i=0,r=0,t,f,o,s;try{t=h.getBoundingClientRect();typeof innerWidth=="number"?(i=window.innerWidth,r=window.innerHeight):document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)?(i=document.documentElement.clientWidth,r=document.documentElement.clientHeight):document.body&&(document.body.clientWidth||document.body.clientHeight)&&(i=document.body.clientWidth,r=document.body.clientHeight);f=-200;t.top===t.bottom&&(f+=e.height*-1);o=t.top>=0&&t.top-200<=r||t.top<=0&&t.top>=f;s=i>t.left&&t.right>=0;u=o&&s}catch(c){u=!0}return u},t=function(){for(var t,i=0,n=0;n<DMAds.Ads.length;n++)t=DMAds.Ads[n],!t.rendered&&l(n)&&u(n)&&e(n),t.rendered&&(i++,t.sticky&&!t.stickySettings&&(t.stickySettings=s(t)),c(n));i===DMAds.Ads.length&&clearInterval(f)},o=function(){var n=function(){for(var c,i,r,o,s=EnableViewOnScroll,n=0;n<DMAds.Ads.length;n++)c=DMAds.Ads[n],c.rendered=!1,i=c.displayOverride,i==="onscroll"||i==="true"?s=!0:(i==="always"||i==="false")&&(s=!1),!s&&u(n)&&e(n);if(t(),window.addEventListener)window.addEventListener("resize",function(){t();h()},!1),window.addEventListener("scroll",t,!1);else try{window.attachEvent("onresize",function(){t();h()});window.attachEvent("onscroll",t)}catch(l){}for(a(),r=!1,o=0;o<DMAds.Ads.length&&!r;o++)if(r=!u(o),r)break;r&&(f=setInterval(t,100))};DMAds.GPTRenderingMode==="loading"?googletag.cmd.push(function(){n()}):n()},a=function(){var n=null;typeof document.hidden!="undefined"?n="visibilitychange":typeof document.mozHidden!="undefined"?n="mozvisibilitychange":typeof document.msHidden!="undefined"?n="msvisibilitychange":typeof document.webkitHidden!="undefined"&&(n="webkitvisibilitychange");n&&document.addEventListener&&document.addEventListener(n,t,!1)},s=function(n){var u=null,i,t;return n.adContainer&&(i=r(n.adContainer),t={},t.isStickyRequired=n.sticky&&n.sticky==="top",t.absoluteTop=i.y,t.absoluteLeft=i.x,t.absoluteTop!==-1&&(t.originalPosition=n.theAdDiv.style.position,u=t)),u},h=function(){for(i=0;i<DMAds.Ads.length;i++){var n=DMAds.Ads[i];n.stickySettings&&n.adContainer&&(n.adContainer.style.position=n.stickySettings.originalPosition,n.stickySettings=s(n),c(i))}},c=function(n){var t=DMAds.Ads[n].adContainer,i=DMAds.Ads[n].stickySettings,f=DMAds.Ads[n].theAdDiv,u,h,s;if(i&&i.isStickyRequired&&t.getBoundingClientRect&&document.getElementsByClassName){u=document.getElementsByClassName("sticky-stop")[0];u&&(h=r(u),s=u.getBoundingClientRect());var c=r(t),e=t.getBoundingClientRect(),o,l=c.y+e.height+Math.abs(e.top)>h.y;u&&l&&s.top<e.height?o=s.top-e.height+"px":window.pageYOffset+10>=i.absoluteTop&&(o="10px");o?(t.style.position="fixed",t.style.top=o,t.style.left=i.absoluteLeft-window.pageXOffset+"px",f.clientHeight===0&&(f.style.height=t.clientHeight+"px"),f.clientWidth===0&&(f.style.width=t.clientWidth+"px")):t.style.position=i.originalPosition}},r=function(n){var t={};if(t.x=-1,t.y=-1,n.getBoundingClientRect){var r=n.getBoundingClientRect(),i=document.documentElement,u=window.pageYOffset||i.scrollTop||document.body.scrollTop||0,f=window.pageXOffset||i.scrollLeft||document.body.scrollLeft||0,e=i.clientTop||document.body.clientTop||0,o=i.clientLeft||document.body.clientLeft||0;t.y=r.top+u-e;t.x=r.left+f-o}return t},u=function(n){var t=DMAds.Ads[n].theAdDiv,i=!1,r;return t&&t.style.position!=="fixed"&&t.offsetParent?i=!0:t&&t.style.position==="fixed"&&(r=window.getComputedStyle(t),i=r&&r.display!=="none"),i&&v()},v=function(){var t=!0,n="";return typeof document.hidden!="undefined"?n="hidden":typeof document.mozHidden!="undefined"?n="mozHidden":typeof document.msHidden!="undefined"?n="msHidden":typeof document.webkitHidden!="undefined"&&(n="webkitHidden"),n!==null&&document[n]&&(t=!1),t},f=f||null;n||DMAds.CreateAdsCalled?n&&(DMAds.Ads[DMAds.Ads.length]=DMAds.GetDivRequestData(n,DMAds.Ads.length-1),DMAds.PublisherCode=DMAds.Ads[0].publisher,DMAds.SetPageTagsAndPixels(o)):(DMAds.CreateAdsCalled=!0,DMAds.SetAdRequestData(),DMAds.Ads.length>0&&(DMAds.PublisherCode=DMAds.Ads[0].publisher,DMAds.SetPageTagsAndPixels(o)))},ShowAd:function(n){var t=DMAds.Ads,i;if(n&&(DMAds.GPTRenderingMode!=="weLoadedGPT"||!DMAds.PublisherPageViewGuid))t.push(n),DMAds.GetTermsCalled||(DMAds.PublisherCode=n.sitename,DMAds.SetPageTagsAndPixels(DMAds.ShowAd));else if(DMAds.GPTRenderingMode==="weLoadedGPT"&&DMAds.PublisherPageViewGuid){while(t&&t.length>0)i=t.pop(),DMAds.RequestQueuedAd(i);n&&DMAds.RequestQueuedAd(n)}},InitGPTLibrary:function(){if(googletag){var n=function(){if(googletag.pubadsReady)DMAds.GPTRenderingMode!=="weLoadedGPT"&&(DMAds.GPTRenderingMode="gptAlreadyLoaded");else{if(googletag.pubads().enableSingleRequest(),googletag.pubads().disableInitialLoad(),DMAds.Ads&&DMAds.Ads[0]&&typeof DMAds.Ads[0].cookieConsent!="undefined"){var n=DMAds.Ads[0].cookieConsent?1:0;googletag.pubads().setRequestNonPersonalizedAds(n?0:1)}googletag.pubads().enableAsyncRendering();googletag.enableServices();DMAds.GPTRenderingMode="weLoadedGPT";googletag.pubads().addEventListener("slotRenderEnded",function(n){DMAds.OnSlotRendered(n)})}};googletag.apiReady?n():googletag.cmd.push(function(){n()})}},BuildIFrameTag:function(n){var t=document.createElement("IFRAME"),i;return t.allowtransparency=!1,t.id="dm-gpt-iframe-"+n.tile,t.width=n.width,t.height=n.height,t.marginWidth=0,t.marginHeight=0,t.frameBorder=0,t.scrolling="no",i=encodeURIComponent(location.href),i.length<2048&&(t.dc_ref=i),t},BuildInlineGPTTagScript:function(n){var t="div-gpt-ad-"+n.publisher+"-"+n.zone+"-"+n.tile,i="/6839/"+n.publisher+"/"+n.zone,r="["+n.width+", "+n.height+"]",u=(n.tags||"")+","+(DMAds.PageSearchTerms||"")+","+(DMAds.PageQueryTerms||""),f=n.cookieConsent!==undefined,e=n.cookieConsent?1:0,o="<div id='"+t+"'>     <script type='text/javascript'>         googletag.cmd.push(function() {             if ( "+f+" && typeof googletag.pubads == 'function') {               googletag.pubads().setRequestNonPersonalizedAds("+e+" ? 0 : 1);            }            googletag.defineSlot('"+i+"', "+r+",'"+t+"')                 .addService(googletag.pubads())                 .setTargeting('kw', '"+u+"');             googletag.enableServices();             googletag.display('"+t+"');         });     <\/script> <\/div>";return"<script type='text/javascript'> var googletag = googletag || {}; googletag.cmd = googletag.cmd || []; (function() {     var gads = document.createElement('script');     gads.async = true;     gads.type = 'text/javascript';     var useSSL = 'https:' == document.location.protocol;     gads.src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js';     var node =document.getElementsByTagName('script')[0];     node.parentNode.insertBefore(gads, node); })(); <\/script>"+o},BuildGPTTag:function(n){var t=document.createElement("DIV"),i;t.style.height=n.height+"px";t.style.width=n.width+"px";t.style.boxSizing="border-box";t.style.border="0px";t.style.fontSize="0px";i="div-gpt-ad-"+n.publisher+"/"+n.zone+"-"+n.tile;t.id=i;t.adIndex=n.index;n.theAdDiv.appendChild(t);n.adContainer=t;googletag.cmd.push(function(){var u="/6839/"+n.publisher+"/"+n.zone,r=(n.tags||"")+","+(DMAds.PageSearchTerms||"")+","+(DMAds.PageQueryTerms||""),t;r=DMAds.EscapeSpecialCharacters({tags:r});t=googletag.defineSlot(u,[n.width,n.height],i).setTargeting("kw",r);n.articleid&&n.articleid>0&&t.setTargeting("articleid",n.articleid);t.addService(googletag.pubads());n.collapse_empty&&t.setCollapseEmptyDiv(!0,!0);googletag.display(i);googletag.pubads().refresh([t],{changeCorrelator:!1})})},RequestQueuedAd:function(n){googletag.cmd.push(function(){var r="/6839/"+n.sitename+"/"+n.zonename,i=(n.tags||"")+","+(DMAds.PageSearchTerms||""),t;i=DMAds.EscapeSpecialCharacters({tags:i});t=googletag.defineSlot(r,[n.width,n.height],n.targetDivId).setTargeting("kw",i);n.articleid&&n.articleid>0&&t.setTargeting("articleid",n.articleid);t.addService(googletag.pubads());n.collapse_empty&&t.setCollapseEmptyDiv(!0,!0);googletag.display(n.targetDivId);googletag.pubads().refresh([t],{changeCorrelator:!1})})},BuildInlineGPTTag:function(n){var t=DMAds.BuildIFrameTag(n),i;n.theAdDiv.appendChild(t);i=t.contentDocument||t.contentWindow.document||t.contentWindow.window.document;i.write(DMAds.BuildInlineGPTTagScript(n))},EscapeSpecialCharacters:function(n){var t=n.tags,i;t=t.replace(/\+/gi,"{plus}");t=t.replace(/\#/gi,"{sharp}");t=t.replace(/\./gi,"{dot}");t=t.replace(/[\#\*\.\(\)\+\<\>\[\]]/gi,"");for(var r=t.split(","),u=[];r.length>0;)i=r.shift(),/[^\u0020-\u007f]/.test(i)||u.push(i);return u.join(",")},GetArticleId:function(n){var t=0,i,r;if(n&&n===CodeProjectPublisherId)try{i="Articles";r=window.location.href.indexOf(i);r>=0&&(t=window.location.href.substring(r+i.length+1),t=t.substring(0,t.indexOf("/")),t=parseInt(t),isNaN(t)&&(t=0))}catch(u){t=0}return t},IsPagePIICompliant:function(){var t=!0,i,n,r;try{for(i=window.location.href.toLowerCase(),n=0,r=DMAds.PIIViolatingUrls.length;n<r&&t;n++)t=!(i.indexOf(DMAds.PIIViolatingUrls[n])>=0)}catch(u){console.log("Error in IsPagePIICompliant: "+u)}return t},OnSlotRendered:function(n){if(window.location.href&&window.location.href.includes("show_creative_id=1")&&n&&n.creativeId&&console.log(n.creativeId),EnableMutableAds&&n&&!n.isEmpty&&(!n.lineItemId||n.lineItemId&&n.lineItemId===0))DMAdXHelper.showAdReportingInterface(n.slot.getSlotElementId());else if(n&&n.isEmpty){var t=document.getElementById(n.slot.getSlotElementId());t.style.width="0px";t.style.height="0px";t.style.display="none"}DMAds.SignalSuccess(!0)},DetermineTagSize:function(n){if(n.format){var t=n.format.split("x");t.length===2&&(n.width=parseInt(t[0]),n.height=parseInt(t[1]))}},GetElementsByAttr:function(n,t,i,r){var o=[],u,e;i||(i=document);r||(r="*");var f=i.getElementsByTagName(r),s=f.length,h=new RegExp("(^|\\s)"+t+"(\\s|$)");for(u=0,e=0;u<s;u++)h.test(f[u].getAttribute(n))&&(o[e]=f[u],e++);return o},GetElementsByClass:function(n,t,i){var e=[],r,f;t||(t=document);i||(i="*");var u=t.getElementsByTagName(i),o=u.length,s=new RegExp("(^|\\s)"+n+"(\\s|$)");for(r=0,f=0;r<o;r++)s.test(u[r].className)&&(e[f]=u[r],f++);return e},SetAdRequestData:function(){var n=DMAds.GetElementsByAttr("data-type","ad",document,"div"),t;for((n===null||n.length<=0)&&(n=DMAds.GetElementsByClass("lqm_ad",document,"div")),t=0;t<n.length;t++)DMAds.Ads[DMAds.Ads.length]=DMAds.GetDivRequestData(n[t],t)},GetDivRequestData:function(n,t){for(var u,f,r,o=n.attributes,s=o.length,i={},e=0;e<s;e++)u=o.item(e),u.nodeName.indexOf("lqm_")===0&&(f=u.nodeName.slice(4),i[f]=u.value||u.nodeValue),u.nodeName.indexOf("data-")===0&&(f=u.nodeName.slice(5),i[f]=u.value||u.nodeValue);return r={height:0,width:0,publisher:i.publisher,zone:i.zone||"ros",site:i.site,tags:i.tags,sitename:undefined,zonename:undefined,target:"_blank",format:i.format,index:t,tile:t+1,type:i.type,noadx:i.noadx,collapse_empty:i.collapse_empty,displayOverride:i.display||i.loadOnView,sticky:i.sticky,charity:i.charity,cookieConsent:i.cookieconsent,theAdDiv:n},r.tags&&(r.tags=decodeURIComponent(r.tags)),DMAds.DetermineTagSize(r),r.publisher&&r.publisher===CodeProjectPublisherId&&(r.articleid=DMAds.GetArticleId(r.publisher)),r},SetupAds:function(){DMAds.IsPagePIICompliant()&&(DMAds.InitGPTLibrary(),DMAds.SetQueryTerms(),DMAdXHelper.init(DMAds.Ads,{DownvoteUrl:DownvoteUrl,UndoDownvoteUrl:UndoDownvoteUrl,ReportAdUrl:ReportAdUrl,CloseAdImageUrl:CloseAdImageUrl,UndoCloseAdImageUrl:UndoCloseAdImageUrl,DmLogoImageUrl:DmLogoImageUrl}),DMUserIdentityHelper.init(GlobalIdUrl),DMAds.CreateAds())},Initialise:function(){if(DMAds.IsPagePIICompliant())if(window.googletag)DMAds.SetupAds();else{var t="https:"===document.location.protocol,n=document.createElement("script");n.async=!0;n.type="text/javascript";n.src=(t?"https:":"http:")+"//www.googletagservices.com/tag/js/gpt.js";n.onload=this.SetupAds;document.body.appendChild(n)}}};window.DMAds=DMAds}if(DMAds.IsPagePIICompliant())if(window.addEventListener)window.addEventListener("load",function(){DMAds.Initialise()},!1);else try{window.attachEvent("onload",function(){DMAds.Initialise()})}catch(e){DMAds.Initialise()}</script><script async="" type="text/javascript" src="https://www.googletagservices.com/tag/js/gpt.js"></script><script async="" type="text/javascript" src="https://www.googletagservices.com/tag/js/gpt.js"></script><iframe name="googlefcPresent" style="display: none; width: 0px; height: 0px; border: none; z-index: -1000; left: -1000px; top: -1000px;"></iframe></body>